您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++的單例模式是什么意思”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++的單例模式是什么意思”吧!
1.什么叫單例模式?
單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。有很多地方需要這樣的功能模塊,如系統(tǒng)的日志輸出,GUI應用必須是單鼠標,MODEM的聯(lián)接需要一條且只需要一條電話線,操作系統(tǒng)只能有一個窗口管理器,一臺PC連一個鍵盤。
通過單例模式, 可以做到:
(1)確保一個類只有一個實例被建立
(2)提供了一個對對象的全局訪問指針
(3)在不影響單例類的客戶端的情況下允許將來有多個實例
2.怎樣實現(xiàn)單例模式
一個簡單的單例模式該怎樣去實現(xiàn):構造函數(shù)聲明為private或protect防止被外部函數(shù)實例化,內(nèi)部保存一個private static的類指針保存唯一的實例,實例的動作由一個public的類方法代勞,該方法也返回單例類唯一的實例。
3.具體實現(xiàn)
(1)最簡單的單例模式(懶漢模式)
懶漢模式:懶漢式的特點是延遲加載,比如配置文件,采用懶漢式的方法,顧名思義,懶漢么,很懶的,配置文件的實例直到用到的時候才會加載。
class SiglenTon { public: static SiglenTon *GetInstence() { if( p == NULL) { p = new SiglenTon(); } return p; } private: SiglenTon() { cout<<"SiglenTon()"<<endl; } static SiglenTon *p; }; SiglenTon *SiglenTon::p = NULL; int main() { SiglenTon *p = SiglenTon::GetInstence(); return 0; }
(2)第一種方式?jīng)]有考慮到線程安全
class SiglenTon //(線程安全的餓漢模式) { public: static SiglenTon *GetInstence() { cout<<"static SiglenTon *GetInstence()"<<endl; pthread_mutex_lock(&mutex); if( p == NULL) { pthread_mutex_lock(&mutex); p = new SiglenTon(); pthread_mutex_unlock(&mutex); } pthread_mutex_unlock(&mutex); return p; } private: SiglenTon() { cout<<"SiglenTon()"<<endl; } static SiglenTon *p; }; SiglenTon *SiglenTon::p = NULL; int main() { SiglenTon *p = SiglenTon::GetInstence(); SiglenTon *p1 = p->GetInstence(); return 0; }
(3)餓漢模式(餓漢模式本身就是線程安全的)
class SiglenTon { public: SiglenTon *GetInstence() { if( p == NULL) { return p; } } private: SiglenTon() { cout<<"SiglenTon()"<<endl; } static SiglenTon *p; };
感謝各位的閱讀,以上就是“C++的單例模式是什么意思”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++的單例模式是什么意思這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。