C 11改進單例模式

2021-08-20 01:34:05 字數 1344 閱讀 6517

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

template class singleton

static t* getinstance()

static void destroyinstance()

private:

singleton(void);

virtual ~singleton(void);

singleton(const singleton&);

singleton& operator = (const singleton&);

private:

static t* m_pinstance;

};template t* singleton::m_pinstance = nullptr;

上面這個單例可以解決不同型別建構函式形參不盡相同的問題,真正意義上對所有型別都通過的單利模式。

上面的例子就是來說明c++11能夠實現對所有型別都通用的單利模式,但是上面的介面中,單例物件的初始化和取值都是乙個介面,可能會遭到誤用,更新之後,將初始化和取值分為兩個介面,單例的用法是:先初始化,後面取值,如果中途銷毀單例的話,需要重新取值。如果沒有初始化就取值會丟擲乙個異常。

增加multiton的實現(多例模式)

#include #include #include using namespace std;

template < typename t, typename k = string>

class multiton

templatestatic std::shared_ptrinstance(k&& key, args&&... args)

private:

templatestatic std::shared_ptrgetinstance(key&& key, args&&...args)

else

return instance;

}private:

multiton(void);

virtual ~multiton(void);

multiton(const multiton&);

multiton& operator = (const multiton&);

private:

static map> m_map;

};template map> multiton::m_map;

C 11的單例模式

c 11中的單例模式分為懶漢模式和餓漢模式。區別 懶漢模式 延遲建立,在主動獲取物件例項的時候才去建立物件。缺點 多執行緒時需要安全處理。餓漢模式 程式初始化即建立 餓漢模式安全寫法 static singleton getinstance 或者採用call once的寫法 std once fla...

用c 11做單例模式

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

C 11 模板的改進

在c 98 03的泛型程式設計中,模板例項化有乙個很繁瑣的地方,就是連續兩個右尖括號 會被編譯解釋成右移操作符,而不是模板參數列的形式,需要乙個空格進行分割,以避免發生編譯時的錯誤。template class x template class y int main 在例項化模板時會出現連續兩個右尖...