有沒有什麼辦法可以在C++中只允許一個類的實例? 如果有,請向我展開。謝謝。如何在C++中只創建一個實例的類
回答
這是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) {}
雖然複製和分配......否則我可以這樣做:Singleton a = * Singleton :: singleton;單身人士b = a; – 2014-12-07 00:34:15
太複雜了。沒辦法清理它。此外,它可以被複制。考慮一個'public static'函數返回一個對'static'實例的引用(優點:按需構建),或者只是一個'public static'成員。並且不要忘記禁用複製。 – Deduplicator 2014-12-07 00:36:03
@Deduplicator你提到的(a.k.a. Meyers singleton)也保證在C++ 11中是線程安全的,所以如果你真的需要單身人士,這就是要走的路。我找到的最優雅的方式是通過一個CRTP來實現它,在CRTP中你從'Singleton
- 1. 如何在C++中創建一個類的多個實例
- 2. 如何在另一個類中創建一個類的實例
- 3. 如何在asp.net中只創建一次類的實例
- 4. 在Objective C中創建單例類的另一個實例
- 5. 如何在Python的另一個類中創建類的實例
- 6. 在Python中創建一個類實例屬性只讀
- 7. C#如何創建一個類的實例?
- 8. 在C#/ WCF中創建一個類的實例?
- 9. 如何在Smalltalk中創建一個類的實例?
- 10. 如何在python中動態創建一個類的實例?
- 11. 如何在ViewModel類中創建一個新的ViewModel實例?
- 12. 如何在處理中創建一個類的新實例
- 13. ExecutorService - 在方法中創建新實例vs每個類創建一個實例
- 14. 爲「只有一個實例」創建一個Python類?
- 15. 如何在C++中創建一個簡單的單例類?
- 16. 在Application_Start上創建一個類實例
- 17. 如何在模板函數中創建一個類型的實例? (C++)
- 18. 在Python中的類中創建一個類的靜態實例
- 19. 如何確保只有一個類可以創建一個A.B實例?
- 20. 在一個對象的另一個類中創建實例
- 21. 創建一個類的實例
- 22. 創建一個經理類的實例
- 23. 創建另一個類的實例
- 24. 如何創建類的實例並在子類中實現它?
- 25. C#在字典中添加一個類並創建一個新的實例
- 26. Objective-C創建只有一個實例的類的正確方法
- 27. 如何在一個服務中創建一個類的實例(FirebaseService)
- 28. 在哪個類中創建Retrofit實例?
- 29. 在不創建實例的情況下創建一個類?
- 30. SQLAlchemy - 在另一個實例中創建一個實例__init__
你的意思'static'可以使構造私有的,有一個方法'的newInstance( )'只返回一個實例 – motoku 2014-12-07 00:28:33
嘗試單例模式。 – 2014-12-07 00:28:36
@丹:近,但沒有香蕉。 – Deduplicator 2014-12-07 00:46:49