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