我想创建一个只能有一个实例的类。如果我尝试创建该类的另一个实例,它将返回第一个实例。
答案 0 :(得分:5)
我认为你在C ++中搜索Singleton pattern。对于C ++中的单例模式,这里是implementation和linux tutorial
答案 1 :(得分: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);
答案 2 :(得分: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
)?