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

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


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

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