如何在C ++中为每个类初始化返回相同的实例?

时间:2011-01-30 20:45:18

标签: c++ oop class instance

我想创建一个只能有一个实例的类。如果我尝试创建该类的另一个实例,它将返回第一个实例。

3 个答案:

答案 0 :(得分:5)

我认为你在C ++中搜索Singleton pattern。对于C ++中的单例模式,这里是implementationlinux 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)?