Singleton模式是常用的設計模式之一,但是要實現一個真正實用的設計模式卻也不是件容易的事情。
1.標準的實現
這是教科書上使用的方法。看起來沒有什麼問題,其實包含很多的問題。下面我們一個一個的解決。
2.自動垃圾回收
上面的程序必須記住在程序結束的時候,釋放內存。爲了讓它自動的釋放內存,我們引入auto_ptr改變它。
3. 增加模板
在我的一個工程中,有多個的Singleton類,對Singleton類,我都要實現上面這一切,這讓我覺得煩死了。於是我想到了模板來完成這些重複的工作。
現在我們要添加本文中最吸引人單件實現:
4. 線程安全
上面的程序可以適應單線程的程序。但是如果把它用到多線程的程序就會發生問題。主要的問題在於同時執行_instance.reset ( new T); 就會同時產生兩個新的對象,然後馬上釋放一個,這跟Singleton模式的本意不符。所以,你需要更加安全的版本:
///////////////////////////////////////////////////////////////////////////////
5.實用方法
比如你有一個需要實現單件模式的類,就應該這樣實現:
一個簡單的Singleton模式的實現,可以看到C++語言背後隱藏的豐富的語意,我希望有人能實現一個更好的Singleton讓大家學習。我從一開始實現Singleton類的過程,其實就是我學習C++的過程,越是深入越覺得C++了不起。
參考自: