Friday, May 7, 2010

Single Threaded Singleton : My understanding

class CMyClass
{
private:
CMyClass() {} // Private Constructor - prevent construction
CMySingleton(const CMySingleton&); // Prevent copy-construction
CMySingleton& operator=(const CMySingleton&); // Prevent assignment

static int nCount; // Current number of instances
static int nMaxInstance; // Maximum number of instances

public:
~CMyClass() // Public Destructor
{
--nCount; // Decrement number of instances
}


static CMyClass* CreateInstance() // Construct Indirectly
{
CMyClass* ptr = NULL;

if(nMaxInstance > nCount)
{
ptr = new CMyClass;
++nCount; // Increment no of instances
}
return ptr;
}

//Add whatever members you want
};

int CMyClass::nCount = 0;
int CMyClass::nMaxInstance = 1; // When maxInstance is 1, we have a pure singleton class

Practical usage of singleton is -
The OrderEvent class - the factory in the factory method design pattern.
All financial login screens etc are nice examples of singleton behaviour.

No comments:

Post a Comment