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

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


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

在程序開發(fā)中,比較常見的單例就是程序啟動的相關(guān)配置信息了。比如我們定義一個SingletonConfig類。注意這個類有如下特點:
  • 私有的構(gòu)造函數(shù), 拷貝構(gòu)造函數(shù),以及operator=, 保證其不能夠在類的外部進程對象構(gòu)造,拷貝等操作。
  • GetInstance是一個公有的靜態(tài)成員函數(shù),用來構(gòu)造這個類唯一的實例對象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
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉