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

C++ 如何在C+中为每个类初始化返回相同的实例+;?,c++,oop,class,instance,C++,Oop,Class,Instance,我想创建一个只能有一个实例的类。如果我试图再创建一个类的实例,它将返回第一个实例。 我认为你在C++中搜索。这里是C++中的单例模式,这里是,我认为您想要的比单例模式更接近 MonoState的工作原理是通过静态成员变量使所有对象共享相同的状态。虽然实例不同,但它们返回的数据是相同的。下面是一个简单的实现: class MonoStateSession { private: static int _SessionId; public: void SetSessionId(int ne

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

我认为你在C++中搜索。这里是C++中的单例模式,这里是,我认为您想要的比单例模式更接近

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);

不。。。但你可以接近它。例如,您可以创建一个类,其中每个实例都只是同一真实对象的克隆。。。例如:

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
实例仍将是一个不同的对象(例如有自己的地址),但它们将充当
TheAllObject
的唯一实例的蹦床,用于方法和数据成员访问


你为什么要做这么奇怪的事?可能您只是在寻找一个单例(如上面的
TheAllObject

不是一个很好的实现。在面对多个线程时失败。每次使用单线程模式,一只小猫就会死亡。每次Jeff Atwood使用单线程模式,一只独角兽就会死亡!而且,实例永远不会被破坏。这对于某些用途是可以的,对于其他用途则是不可用的。我更喜欢破坏一切,只是为了确保它的功能正确,并有可靠的行为。不破坏可以(在某些情况下)对行为没有太大的影响-它实际上可以加速程序的退出。然而,这通常是个坏主意(戴维),我不精通C++。我刚刚介绍了这个模式,希望能够提供帮助,并尝试从良好的参考资料中提供参考,并使用linux教程进行更新。您知道C++中与多线程的斗争只是一场噩梦:它是为了实践…从一本书