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