#includeusing namespace std;/* 单例模式:懒汉式1、保证该类只有一个实例。2、考虑多线程安全3、考虑资源释放*/class Lock{ public: Lock(){ //加锁代码 } ~Lock(){ //开锁代码 }};class Singleton{ class Garbo{ //辅助类,垃圾回收器 public: ~Garbo(){ if(Singleton::pInstance != NULL){ delete Singleton::pInstance; Singleton::pInstance = NULL; } } };private: static Singleton * pInstance; static Garbo garbo; //当程序结束时自动delete pInstance; Singleton(){}; //禁止自定义对象 Singleton(const Singleton & rhs); //禁止拷贝构造对象 const Singleton & operator=(const Singleton & rhs); ~Singleton(){ cout << "I'm deleted!"< display(); } /*注:关于为何不适用静态成员来实习初始化一次,原因如下: 1.如果将pInstance定义为静态类成员,即static Singleton Instance,然后在getInstance中返回,这样必须在外部初始化,不属于懒汉式; 2、如果将pInstance定义为getInstance函数中的局部静态变量,这样只要getInstance不被调用,pInstance就不会有值,但在多线程环境下局部静态变量(特别是对象)能够保证初始化一次仍然不确定 */
参考文献
- C++版:
- Java版: