//Singleton.h
class Singleton
{
public:
static Singleton* GetInstance();
private:
Singleton() {}
static Singleton *m_pInstance;
};
//Singleton.cpp
Singleton* Singleton::m_pInstance = NULL;
Singleton* Singleton::GetInstance()
{
if(m_pInstance == NULL)
m_pInstance = new Singleton();
return m_pInstance;
}
- class Singleton { // 其它成员 public: static Singleton * GetInstance(){。。。} private: Singleton(){}; static Singleton * m_pInstance; class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CGarbo() { if (Singleton::m_pInstance) delete Singleton::m_pInstance; } }; static CGarbo Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 }
- stance)
- delete Singleton::m_pInstance;
- }
- };
- static CGarbo Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数
- }
类CGarbo被定义为CSingleton的私有内嵌类,以防该类被在其它地方滥用。
在程序运行结束时,系统会调用CSingleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。
使用这种方法释放单例对象有以下特征:
◆在单例类内部定义专有的嵌套类。
◆在单例类内定义私有的专门用于释放的静态成员。
◆利用程序在结束时析构全局变量的特性,选择最终的释放时机。
◆使用C++单例模式的代码不需要任何操作,不必关心对象的释放。