C 單例模式

2022-06-19 15:33:09 字數 1194 閱讀 1323

有兩種模式:

懶漢模式:第一次使用的時候才初始化,需要手動實現執行緒安全。

惡漢模式:程式一開始就初始化,這個可以自動實現執行緒安全。

原理都是:把建構函式設定為私有,新增乙個私有的靜態成員指標變數,新增乙個public getinstance方法獲取指標來使用。

比較常遇到的問題,就是,使用普通指標的話,需要人為的delete,不過如果這個單例物件,需要執行到程式結束的話,也可以由作業系統**記憶體。不過這樣的話,雖然記憶體是**了,但是析構函式是沒有執行的,如果你的析構函式裡面需要執行一些io操作什麼的,那就泡湯了,這個時候,可以引入乙個智慧型指標,這樣,在程式結束的最末,會自動析構。目前,自己寫乙個日誌類(使用快取)就遇到了需要這個的情況。

遇到的問題是,智慧型指標的初始化,他不能使用類的私有成員,所以要把那個智慧型指標設定為友元物件。

懶漢模式,執行緒安全.

cmythreadpool *cmythreadpool::getinstance()

//unlock();

}

return

m_pool;

}class

cmythreadpool

;

惡漢模式下,採用普通指標和只能指標.

#include #include 

using

namespace

std;

class

singletonstatic

public

:

//宣告友元物件

friend shared_ptr;

~singletonstatic()

static

const singletonstatic*getinstance()

static

const shared_ptrgetnewinstance()

};//

外部初始化 before invoke main

const singletonstatic* singletonstatic::m_instance = new

singletonstatic();

//這裡就可以呼叫他的私有建構函式了

shared_ptrsingletonstatic::n_instance(new

singletonstatic);

intmain()

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 ...