您好,登錄后才能下訂單哦!
單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。 從具體實現角度來說,就是以下三點:一是單例模式的類只提供私有的構造函數,二是類定義中含有一個該類的靜態私有對象,三是該類提供了一個靜態的公有的函數用于創建或獲取它本身的靜態私有對象。 (1)這種方法只適用單線程。 #include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//構造函數私有化 { cout<<"Csingleton()"<<endl; } static Csingleton* m_pInstance; public: static Csingleton* GetInstance() { //判斷是否是第一次調用 if(m_pInstance==NULL) { m_pInstance= new Csingleton(); } return m_pInstance; } }; Csingleton* Csingleton::m_pInstance=NULL; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }
(2)多線程,當Csingleton還沒有創建出來時,需要加把鎖;當Csingleton創建出來之后,無需加鎖。
#include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//構造函數私有化 { cout<<"Csingleton()"<<endl; } static Csingleton* m_pInstance; public: static Csingleton* GetInstance() { //判斷是否是第一次調用 if(m_pInstance==NULL) { /*lock(syncObj);*/ m_pInstance= new Csingleton(); } return m_pInstance; } }; Csingleton* Csingleton::m_pInstance=NULL; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }
(3)利用靜態構造函數,初始化靜態變量的時候創建實例。
#include<iostream> #include<stdlib.h> using namespace std; class Csingleton { private: Csingleton()//構造函數私有化 { cout<<"Csingleton()"<<endl; } private: static Csingleton* m_pInstance=new Csingleton(); public: static Csingleton* GetInstance() { return m_pInstance; } }; void test() { Csingleton* c=Csingleton::GetInstance(); Csingleton* s=Csingleton::GetInstance(); } int main() { test(); system("pause"); return 0; }
結果:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。