C++ 单类实例C++;

C++ 单类实例C++;,c++,class,C++,Class,是否可以创建一个只需构造一次的类?如果您试图创建它的其他实例,则会发生编译时错误。为什么会发生编译错误?我认为,您只需要实现单例设计模式。 看只有一个实例的类称为singleton类 有很多方法可以做到这一点。最简单的示例如下所示 class MySingleton { public: static MySingleton& Instance() { static MySingleton singleton; ret

是否可以创建一个只需构造一次的类?如果您试图创建它的其他实例,则会发生编译时错误。

为什么会发生编译错误?我认为,您只需要实现单例设计模式。

只有一个实例的类称为singleton类

有很多方法可以做到这一点。最简单的示例如下所示

class MySingleton
    {
    public:
      static MySingleton& Instance()
      {
        static MySingleton singleton;
        return singleton;
      }

    // Other non-static member functions
    private:
      MySingleton() {};                                 // Private constructor
      MySingleton(const MySingleton&);                 // Prevent copy-construction
      MySingleton& operator=(const MySingleton&);      // Prevent assignment
    };

实例化在运行时是动态的。编译错误发生在编译时。所以答案是否定的,在任何第二次实例化中都不可能得到编译错误


<>你可以使用一个单体,但是要非常仔细地考虑它是否真的需要。

你所寻找的被称为单体。我必须敦促你非常认真地考虑单身人士是否真的对你的申请有意义。99%的情况下,不应该使用单例。但是,对于所有创建查询,单例只会返回相同的实例。这可能比接收exception.AFAIK更有用,因为没有选项使此类具有编译时错误。但是有一种叫做“Singleton”的流行模式,用于生成阻止实例化的类。你可以很容易地在谷歌上搜索成吨的例子。@rafdp:你为什么想要这个?这闻起来像是一个.rafdp询问的编译时错误示例,这不是一个答案。@Yarg如果您试图创建多个MySingleton类实例,那么它将给出编译错误,这就是rafdp询问的。静态MySingleton&OtherInstance()如何{static MySingleton anotherSingleton;返回anotherSingleton;}@Yarg如果你是说可以修改类定义来创建另一个实例,那么当然。但我认为OP所说的是这样一个场景,即类的设计是为了让类的用户得到编译错误。我认为假设这些用户不会修改类来绕过限制是合理的@Jaguar:代码正在返回引用。因此无法证明编译时错误。
MySingleton&a=MySingleton::Instance();MySingleton&b=MySingleton::Instance();
a和b都将引用单个静态实例
singleton