大規(guī)模高性能網(wǎng)絡(luò)服務(wù)器編程 大型游戲服務(wù)器編程 完成端口模型 TCP UDP P2P 網(wǎng)絡(luò)編程
posted on 2010-08-31 15:56 iKusamba 閱讀(1473) 評(píng)論(10) 編輯 收藏 引用 所屬分類: C++技術(shù)
MySingleton& GetSingleton() { static MySingleton singleton; return singleton; } 回復(fù) 更多評(píng)論
@陳梓瀚(vczh) 這是最常見的Meyers Singleton,有些編譯器可能會(huì)出錯(cuò),還有析構(gòu)時(shí)間沒有辦法控制,可能會(huì)導(dǎo)致K.D.L方面的問題 我的想法是避免多線程和內(nèi)存方面的問題 回復(fù) 更多評(píng)論
1. 既然對(duì)象肯定要用到而且會(huì)在main()里邊析構(gòu),那么用一個(gè)全局的指針不就行了?在main()里邊構(gòu)造一個(gè)局部對(duì)象,把全局指針指向它。完全不必用宏,也不必手動(dòng)釋放對(duì)象。2. 為了防止在別處意外構(gòu)造對(duì)象,把構(gòu)造函數(shù)的參數(shù)定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒有人故意誤用。3. 為什么要默認(rèn)使用虛析構(gòu)?既然構(gòu)造函數(shù)是private的,說(shuō)明根本不可能創(chuàng)建派生類的對(duì)象,虛析構(gòu)意義何在? 回復(fù) 更多評(píng)論
我覺得我們是否更應(yīng)該去避免這些問題的產(chǎn)生,而不是去想法來(lái)解決“會(huì)出現(xiàn)”的問題呢。 回復(fù) 更多評(píng)論
@陳碩感謝你提出的問題,我來(lái)逐條解釋下“1. 既然對(duì)象肯定要用到而且會(huì)在main()里邊析構(gòu),那么用一個(gè)全局的指針不就行了?在main()里邊構(gòu)造一個(gè)局部對(duì)象,把全局指針指向它。完全不必用宏,也不必手動(dòng)釋放對(duì)象?!?br>"2. 為了防止在別處意外構(gòu)造對(duì)象,把構(gòu)造函數(shù)的參數(shù)定為 enum YouShouldNotConstructTheObjectUnlessInMain,這樣一搜源代碼就知道有沒有人故意誤用。"答:全局變量和帶參數(shù)的構(gòu)造函數(shù)也是可以用的,這里討論的是singleton“3. 為什么要默認(rèn)使用虛析構(gòu)?既然構(gòu)造函數(shù)是private的,說(shuō)明根本不可能創(chuàng)建派生類的對(duì)象,虛析構(gòu)意義何在?”答:對(duì)象可能會(huì)有父類 回復(fù) 更多評(píng)論
@cpp你說(shuō)的也對(duì),我覺得借助好的想法,好的框架再加上“更應(yīng)該去避免這些問題的產(chǎn)生”,能事半功倍! 回復(fù) 更多評(píng)論
@iKusamba 那就加CriticalSection哈,就沒事了。反正肯定會(huì)在main之后析構(gòu)的,這個(gè)也不用控制了。如果你想控制,那還是給你的singleton類加上“Close()”。 回復(fù) 更多評(píng)論
@iKusamba 應(yīng)該是“ExceptInMain”哈,Unless是不對(duì)的…… 回復(fù) 更多評(píng)論
@陳梓瀚(vczh)在內(nèi)部有static的Destroy()如果singleton中有new,可以在析構(gòu)函數(shù)中清除 回復(fù) 更多評(píng)論
我發(fā)現(xiàn)模式里面討論的最多的是單例,其實(shí)單例也就那么一回事。線程安全好像討論的最多,線程安全各有各的說(shuō)法,有沒有更加有力的說(shuō)法? 回復(fù) 更多評(píng)論