?在一個進程中,一個類僅創(chuàng)建一個唯一的實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
?主要應(yīng)用場景有:日志記錄,配置管理,線程池,連接池,內(nèi)存池等。
1. 構(gòu)造函數(shù)私有化
包括普通構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦值操作符重載函數(shù),防止出現(xiàn)一個以上的實例。
2. 使用類的私有靜態(tài)指針變量指向類的唯一實例
3. 使用一個公有的靜態(tài)方法獲取該實例
class Singleton
{
private:
?? ?static Singleton* instance;
private:
?? ?Singleton() {};
?? ?~Singleton() {};
?? ?Singleton(const Singleton&);
?? ?Singleton& operator=(const Singleton&);
public:
?? ?static Singleton* getInstance()?
? ? {
?? ??? ?if(instance == NULL)
?? ??? ??? ?instance = new Singleton();
?? ??? ?return instance;
?? ?}
};
?
// init static member
Singleton* Singleton::instance = NULL;
4. 線程安全?線程安全問題根本原因:兩個線程同時調(diào)用getInstance(),可能產(chǎn)生兩個實例。
? 一般考慮加鎖的方式避免線程安全問題,但加鎖比較繁瑣,并且稍有不慎仍然可能出問題。
? 本文從用法上來避免線程安全問題,此方法簡單明了,不會出錯,適合大部分場景。
? 本文的用法如下:
? 在主線程中事先創(chuàng)建好實列,以后在其他線程中僅僅獲取該實例指針進行使用。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當前名稱:c++設(shè)計模式之單例模式-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://muchs.cn/article38/dooepp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、動態(tài)網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)建站、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容