1、c++單例模式的概念及作用
單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。
2、單例模式的實現原理
(1)私有靜態指標變數實現:使用類的私有靜態指標變數指向類的唯一例項,並用乙個公有的靜態方法獲取該例項。
(2)靜態區域性變數實現:在公有靜方法中定義指向該類的乙個靜態區域性變數,並返回該靜態區域性變數。
3、單例模式的實現**
(1)
//私有靜態指標變數實現class
singleton
static singleton *pinstance;
public
:
static singleton *getinstance()
};
(2)
//靜態區域性變數class
singleton
public
:
static singleton &getinstance()
};
4、擴充套件
a) 把建構函式設為私有,禁用賦值和複製。帶來的問題:main中無法隨意生成物件
b) 提供乙個static函式繞過建構函式為private的限制。問題:物件不唯一。
c) 設定乙個static指標,每次先判斷是否為null。此時實現了乙個簡單的單例模式。但是此時在多執行緒環境下不唯一。
d) 引入互斥鎖,實現對getinstance內臨界區的互斥訪問。此時每次呼叫都需要上鎖,導致效率下降。
e) 採用double check模式,使得不必每次呼叫都需要加鎖,提高了效率。
5、dclp(double-check-locking-pattern)
classsingleton
return
pinstance_;
}private
: singleton()
static singleton *pinstance_;
static
mutexlock mutex_;
};
c 之單例模式
1 本篇主要討論下多執行緒下的單例模式實現 首先是 double check 實現方式 這種模式可以滿足多執行緒環境下,只產生乙個例項。templateclass dclsingleton return value protected dclsingleton dclsingleton const ...
c 多執行緒單例模式 C 設計模式之單例模式
單例模式 乙個類在記憶體中只有乙個物件 例項 並且提供乙個可以全域性訪問或者獲取這個物件的方法。這兩天學的,寫了個小例子,問了同事一些關於執行緒的問題,還有從網上查了一些資料。還犯了一些低階的錯誤。vs2017控制台輸出文字亂碼,從網上找了一些方法不管用,最後發現是自己新建專案選錯模板了,選擇了.n...
單例模式 之 單例模式 Holder
之前我寫過 單例模式中的餓漢模式和懶漢模式 他們雖然都能實現單例模式 但是優缺點很明顯 餓漢模式 不能懶載入 類載入就會被例項化 消耗很大,在併發情況下安全性很高。懶漢模式 能實現懶載入,但是在併發情況下安全性不是很高。雖然一步一步的優化,安全性得到了保證,但是卻使用了synchronized 對效...