當前位置:首頁 > 公眾號精選 > C語言與CPP編程
[導讀]單例模式是一個很常見的設計模式,也廣泛應用于程序開發(fā)。其具有如下特點:一個類只有一個實例化對象全局可以使用那么有人要問,那我不就定義一個類,程序只初始化一個全局的實例就好了嗎?沒錯,這樣是可以的。但是我們都知道程序會經(jīng)過多人的接手維護和開發(fā),比如第N個接手程序的時候,并不知道這個...

單例模式是一個很常見的設計模式,也廣泛應用于程序開發(fā)。其具有如下特點:
  • 一個類只有一個實例化對象
  • 全局可以使用
那么有人要問,那我不就定義一個類,程序只初始化一個全局的實例就好了嗎?沒錯,這樣是可以的。但是我們都知道程序會經(jīng)過多人的接手維護和開發(fā),比如第N個接手程序的時候,并不知道這個類定義的時候只能初始化一個實例,然后又實例化了新的對象, 則可能會造成意想不到的場景。那么這時候就要提到防御性編程,個人認為單例模式的實現(xiàn)也是防御性編程的一種方式,讓這個類保證只有一個實例化對象,并且如果試圖構造多個對象的時候,在程序的編譯期報錯。題外話,這也是為什么本人在進行一些稍大規(guī)模開發(fā)的時候,只會去選擇強類型語言,而不會選擇弱類型語言的原因,強類型語言會在編譯期間幫我們避免很多運行時可能產(chǎn)生的的Bug。本文我們將探討如下內容:
  • 單例模式的基本實現(xiàn):包含單例模式的實現(xiàn),線程安全,以及生命周期等
  • 單例模式的模板實現(xiàn), 多模塊調用單例存在的問題


單例模式的基本實現(xiàn)

在程序開發(fā)中,比較常見的單例就是程序啟動的相關配置信息了。比如我們定義一個SingletonConfig類。注意這個類有如下特點:
  • 私有的構造函數(shù), 拷貝構造函數(shù),以及operator=, 保證其不能夠在類的外部進程對象構造,拷貝等操作。
  • GetInstance是一個公有的靜態(tài)成員函數(shù),用來構造這個類唯一的實例對象m_objConfig, 并且返回給使用者。
我們來看下代碼實現(xiàn):
class SingletonConfig{public: static SingletonConfig * GetInstance(){ if (m_objConfig = = nullptr) m_objConfig = new SingletonConfig; return m_objConfig; }
private: SingletonConfig() { ; }; SingletonConfig(const SingletonConfig
本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉