我想創建一個只能有一個實例的類。如果我嘗試創建另一個類的實例,它將返回第一個實例。如何在C++中爲每個類初始化返回相同的實例?
2
A
回答
5
我覺得你正在用C++搜索Singleton pattern。這裏是implementation和這裏linux tutorial單身模式在C++
2
我想你想要的是比單身更接近MonoState。
MonoState通過使所有對象通過靜態成員變量共享相同的狀態。雖然實例不同,但這些實例返回的數據是相同的。這是一個簡單的實現:
class MonoStateSession {
private:
static int _SessionId;
public:
void SetSessionId(int newSessionId) {
//Put threading checks/locks here
_SessionId = newSessionId;
}
int GetSessionId() {
return _SessionId;
}
}
//Usage
MonoStateSession session1 = new MonoStateSession();
session1.SetSessionId(123);
MonoStateSession session2 = new MonoStateSession();
assert(session2.GetSessionId() == 123);
1
不......但你可以接近。例如,你可以創建一個類,每一個實例只是同一個真實物體的克隆...例如:
struct TheRealObject
{
std::string s;
TheRealObject() { ... }
void foo(int x) { ... }
double bar(char y) { ... }
static TheRealObject& getInstance()
{
static TheRealObject trb;
return trb;
}
};
struct MyObject
{
std::string& s;
MyObject() : s(TheRealObject::getInstance().s) {}
void foo(int x) { TheRealObject::getInstance().foo(x); }
double bar(char y) { return TheRealObject::getInstance().bar(y); }
};
注意,每MyObject
實例仍然將是一個不同的對象(與它自己的地址,例如),但它們只是作爲蹦牀的唯一方法和數據成員訪問方面的現有TheRealObject
。
你爲什麼想做這種奇怪的事情?也許你只是想找一個單身人士(就像上面的TheRealObject
)?
相關問題
- 1. Objective-C返回不同類的實例,初始化爲
- 2. 初始化在spring xml中實現相同接口的類的多個實例
- 3. 爲什麼類實例返回None當它初始化
- 4. 在類中初始化類實例
- 5. 如何在初始化父類時返回子類的新實例?
- 6. 如何使用相同的文檔類初始化多個Solr實例?
- 7. C++ - 初始化類成員與實例
- 8. NameError初始化類實例
- 9. 初始化類實例?
- 10. 如何獲得不同的隨機數在C++中每個類的初始化
- 11. c中的實例初始化策略#
- 12. 總是返回相同實例的類
- 13. C++,結構初始化多個實例
- 14. PHPUNIT - 返回實例化類2的同一個實例
- 15. ruby - 類的實例化和初始化(初始化不叫?)
- 16. 在php中初始化一個實例
- 17. C#:訪問靜態類實例的初始化成員返回NULL
- 18. Swift:如何在一個類中初始化一個類的實例
- 19. 初始化作爲複雜類/結構實例的常量(C++)
- 20. IOS對象C:初始化多個具有相同值的IBOutlet實例
- 21. Objective-C的單例類的實例初始化函數
- 22. 如何確保始終爲特定的C++實例返回相同的Python實例?
- 23. 在初始化中實例化對象?
- 24. 如何在Objective C中返回一個類的實例?
- 25. 如何在Python中初始化類(不是實例)?
- 26. 爲什麼實例和靜態內部類初始化不同?
- 27. 在C++中初始化類
- 28. 初始化父類實例的屬性
- 29. 新的類實例未初始化
- 30. 關於類實例的初始化
你爲什麼要這樣做? – 2011-01-30 20:46:44
這是練習...從書 – prgDevelop 2011-01-30 20:52:35