Interning

A variation of the Singleton is Intern. Assume a class of

class Symbol
{
private:
   string name;
   Symbol()
  
   // etc.
};

class Intern
{
private:
   map<string, Symbol> symbols;
public:
   Symbol makeSymbol(string name)
   {
      map<string, Symbol>::iterator p;
      p = symbols.find(name);