單例模式,顧名思義,就是我宣告乙個類,這個類只能有乙個物件,也叫單體類。
一般常用的做法是將這個類的 建構函式 設定為私有方法,不對外可見,然後提供乙個類的靜態方法進行構造物件。
同時,一般還會將 拷貝建構函式,賦值建構函式 同樣宣告為不可見。可使用巨集: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 ...