有兩種模式:
懶漢模式:第一次使用的時候才初始化,需要手動實現執行緒安全。
惡漢模式:程式一開始就初始化,這個可以自動實現執行緒安全。
原理都是:把建構函式設定為私有,新增乙個私有的靜態成員指標變數,新增乙個public getinstance方法獲取指標來使用。
比較常遇到的問題,就是,使用普通指標的話,需要人為的delete,不過如果這個單例物件,需要執行到程式結束的話,也可以由作業系統**記憶體。不過這樣的話,雖然記憶體是**了,但是析構函式是沒有執行的,如果你的析構函式裡面需要執行一些io操作什麼的,那就泡湯了,這個時候,可以引入乙個智慧型指標,這樣,在程式結束的最末,會自動析構。目前,自己寫乙個日誌類(使用快取)就遇到了需要這個的情況。
遇到的問題是,智慧型指標的初始化,他不能使用類的私有成員,所以要把那個智慧型指標設定為友元物件。
懶漢模式,執行緒安全.
cmythreadpool *cmythreadpool::getinstance()//unlock();
}
return
m_pool;
}class
cmythreadpool
;
惡漢模式下,採用普通指標和只能指標.
#include #includeusing
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 ...