2014-12-07 94 views
0

有沒有什麼辦法可以在C++中只允許一個類的實例? 如果有,請向我展開。謝謝。如何在C++中只創建一個實例的類

+0

你的意思'static'可以使構造私有的,有一個方法'的newInstance( )'只返回一個實例 – motoku 2014-12-07 00:28:33

+1

嘗試單例模式。 – 2014-12-07 00:28:36

+0

@丹:近,但沒有香蕉。 – Deduplicator 2014-12-07 00:46:49

回答

2

這是singleton pattern。您可以通過一個公共的靜態屬性和私有構造實現這一目標:

class Singleton { 
    public: 
     static Singleton * const singleton; 
    private: 
     Singleton(void) {} 
}; 
Singleton * const Singleton::singleton = new Singleton(); 

編輯:從丹·沃特金斯好一點;如果你真的想成爲嚴厲的話,你可以也明確宣佈這些方法私人禁止複製和分配:

private: 
     Singleton(void) {} 
     Singleton(Singleton& other) {} 
     Singleton& operator=(Singleton& other) {} 
+0

雖然複製和分配......否則我可以這樣做:Singleton a = * Singleton :: singleton;單身人士b = a; – 2014-12-07 00:34:15

+2

太複雜了。沒辦法清理它。此外,它可以被複制。考慮一個'public static'函數返回一個對'static'實例的引用(優點:按需構建),或者只是一個'public static'成員。並且不要忘記禁用複製。 – Deduplicator 2014-12-07 00:36:03

+0

@Deduplicator你提到的(a.k.a. Meyers singleton)也保證在C++ 11中是線程安全的,所以如果你真的需要單身人士,這就是要走的路。我找到的最優雅的方式是通過一個CRTP來實現它,在CRTP中你從'Singleton '派生出來,並在'Base'中製作'Singleton '朋友。然後,所有的單身功能(刪除複製等)可以在'Singleton '中完成。 – vsoftco 2014-12-07 00:45:36

相關問題