饿汉实现:
class singleton { public: static singleton* getInstance(); private: singleton() {} static singleton* p;
class CGarbo { public: ~CGarbo() { if(singleton::p) delete singleton::p; } }; static CGarbo Garbo; //定义一个静态成员,程序结束时,系统会自动调用它的析构函数 };
singleton* singleton::p = new singleton(); singleton* singleton::getInstance() { return p; }
懒汉实现:
class singleton { public: static pthread_mutex_t mutex; static singleton* getInstance(); protected: singleton() { pthread_mutex_init(&mutex); } private: static singleton* p; }; pthread_mutex_t singleton::mutex; singleton* singleton::p = NULL; singleton* singleton::getInstance() { if (p == NULL) { pthread_mutex_lock(&mutex); if (p == NULL) p = new singleton(); pthread_mutex_unlock(&mutex); } return p; }
class Singleton { private: Singleton(){}//隐藏构造函数 Singleton(const Singleton &){}//隐藏拷贝构造函数 Singleton& operator=(const Singleton &a){}//隐藏赋值操作符 ~Singleton(){}//隐藏析构函数 public: static Singleton *getInstance() { lock();//c++11 可以不用加锁 static Singleton s; unlock(); return &s; } };