C 11的單例模式

2021-10-09 14:47:13 字數 701 閱讀 9137

c++11中的單例模式分為懶漢模式和餓漢模式。

區別:懶漢模式:延遲建立,在主動獲取物件例項的時候才去建立物件。缺點:多執行緒時需要安全處理。

餓漢模式:程式初始化即建立

餓漢模式安全寫法:

static singleton* getinstance()

}

或者採用call_once的寫法:

std::once_flag g_flag;

class singleton

static singleton* getinstance()

static void destreyinstance()

}private:

// 防止外部構造。

singleton() = default;

// 防止拷貝和賦值。

singleton& operator=(const singleton&) = delete;

singleton(const singleton& singleton2) = delete;

private:

static singleton* singleton_;

static std::once_flag initsuccess;

static std::mutex m_lock;

};

C 11改進單例模式

我們在寫單例模式的時候會遇到乙個問題,就是多種型別的單例可能需要建立多個型別的單例,主要是因為建立單例物件的建構函式無法統一,各種型別的形參不盡相同,導致我們不容易做乙個所有型別都通過的單例。現在c 11幫助我們解決了這個問題,解決這個問題的關鍵靠的是c 11的可變模板引數,下面看 template...

用c 11做單例模式

做個工程上能用的單例模式,不僅要支援多執行緒,也要支援多引數傳遞,也要支援餓漢和懶漢兩種模式,用了下c 11的call once,lamda表示式,可變引數模板和forward的 如下 include include using namespace std templateclass singlet...

使用C 11的可變引數模板改造單例模式

本人以前寫過乙個c 的單例模式 見此 設計模式c 之單例 想法很簡單,不值一提。最近,看了c 11的新特性中有可變引數模板,想到是否可以以此來改造單例模式。參考了網上的一些經驗,寫了乙個大多數情況下可以通用的乙個單例模式,以此記錄。template t class singleton return ...