Sometimes you want to make sure that you will have only one object of a specific class in your application. There is a simple technique for doing this. This example code uses the class Foo:
class Foo{public: static Foo* GetInstance() { static BOOL bInit = FALSE; if (bInit == FALSE) { bInit = TRUE; m_pInstance = new Foo(); } return m_pInstance; }private: Foo() {} static Foo *m_pInstance;};Foo* Foo::m_pInstance = NULL;
Now the only way you can create an object of type Foo is by calling to the static method GetInstance(). For example:
Foo foo(); // compilation failure - constructor is privateFoo* pFoo1 = Foo::GetInstance(); // the right way to get pointer to Foo objectFoo* pFoo2 = Foo::GetInstance(); // get pointer to the same object as pFoo1 and doesn't create new object