c++ 单例模式

饿汉实现:

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;
    }
 
};

参考: https://www.cnblogs.com/TenosDoIt/p/3639395.html

原文地址:https://www.cnblogs.com/nanqiang/p/7444765.html