單例模式 C

2021-08-17 19:41:28 字數 780 閱讀 9807

單例模式,顧名思義,就是我宣告乙個類,這個類只能有乙個物件,也叫單體類。

一般常用的做法是將這個類的 建構函式 設定為私有方法,不對外可見,然後提供乙個類的靜態方法進行構造物件。

同時,一般還會將 拷貝建構函式,賦值建構函式 同樣宣告為不可見。可使用巨集:declare_uncopyable();

因為乙個類,會自動新增如下的預設函式:

預設建構函式

預設析構函式

預設拷貝建構函式

預設賦值函式

對於單體類而言,建構函式,拷貝建構函式,賦值函式都應該是對外不可見的。

如下:class singleton ;

declare_uncopyable(singleton) ;

static singleton* m_instance ;

singleton* singleton::instance () else

以上方式的instance方法是非執行緒安全的,如果出現多個執行緒同時呼叫時,有可能會出現兩個或多個執行緒同時進入if條件判斷邏輯,這樣就都會通過而建立出多個物件的情況,所以需要加鎖進行執行緒同步。

class singleton ;

declare_uncopyable(singleton) ;

static singleton* m_instance ;

static mutex m_lock ;

singleton* singleton::instance () else

注意:類的靜態方法中,只能使用靜態變數。

到這一步就是安全的了。

C 單例模式

include using namespace std 單例類的c 實現 class singleton 構造方法實現 singleton singleton void singleton setvar int var main int main int argc,char argv return ...

C 單例模式

實現方式一 include template typename t class singleton boost noncopyable static void init private static pthread once t ponce statict value template typena...

C 單例模式

效率有點低,但是還算安全的單例模式,靜態成員實現方式 class singleton public static singleton getinstance singleton singleton getinstance unlock return m instance 內部靜態例項的懶漢模式,c ...