1.設計思想:
單例模式,顧名思義,即一個類只有一個實例對象。C++一般的方法是將構造函數、拷貝構造函數以及賦值操作符函數聲明為private級別,從而阻止用戶實例化一個類。那么,如何才能獲得該類的對象呢?這時,需要類提供一個public&static的方法,通過該方法獲得這個類唯一的一個實例化對象。這就是單例模式基本的一個思想。
2.分類:
1).懶漢式:用的時候才加載,在類的public,getInstance方法中創建對象,場景就是可能有不用的情況,需要通過手動加鎖實現線程安全。
2).餓漢式:該實例對象需要存儲在內存的全局數據區,故使用static修飾,程序開始時,全局變量就會初始化。場景就是肯定會實例化,本身就是線程安全。
1.經典懶漢模式:(new)
class singleton { protected: singleton() { pthread_mutex_init(&mutex); } private: static singleton* p; public: static pthread_mutex_t mutex; static singleton* initance(); }; pthread_mutex_t singleton::mutex; singleton* singleton::p = NULL; singleton* singleton::initance() { if (p == NULL) { pthread_mutex_lock(&mutex); if (p == NULL) p = new singleton(); pthread_mutex_unlock(&mutex); } return p; }
2.懶漢模式(靜態變量)
class singleton { protected: singleton() { pthread_mutex_init(&mutex); } public: static pthread_mutex_t mutex; static singleton* initance(); int a; }; pthread_mutex_t singleton::mutex; singleton* singleton::initance() { pthread_mutex_lock(&mutex); static singleton obj; pthread_mutex_unlock(&mutex); return &obj; }
3.餓漢模式
class singleton { protected: singleton() {} private: static singleton* p; public: static singleton* initance(); }; singleton* singleton::p = new singleton; singleton* singleton::initance() { return p; }