C++ 如何使用Meyer';没有复制构造函数的单例?

C++ 如何使用Meyer';没有复制构造函数的单例?,c++,singleton,C++,Singleton,这是一些人提到的梅尔单身汉 static Singleton& getinstance() { static Singleton s_obj; return s_obj; } 但是用户如何使用这个getInstance()API呢 如果我这样用的话 Singleton myobj = getinstance(); 我真的会复印一份s_obj对吗? 因此,我现在有两个实例myobj和s_obj,它们违反了单例的目的 有人能解释一下如何正确理解Meyer的单例吗?关键

这是一些人提到的梅尔单身汉

static Singleton& getinstance()
{
     static Singleton s_obj;
     return s_obj;
}
但是用户如何使用这个getInstance()API呢

如果我这样用的话

Singleton myobj = getinstance();
我真的会复印一份s_obj对吗? 因此,我现在有两个实例
myobj
s_obj
,它们违反了单例的目的


有人能解释一下如何正确理解Meyer的单例吗?

关键是,将复制构造函数、移动构造函数、复制赋值操作符、移动赋值操作符删除,然后将可用构造函数设为私有,这样其他人就不能复制它了:

class Singleton
{
public:
  Singleton(Singleton const&) = delete;
  Singleton(Singleton&&) = delete;
  Singleton& operator=(Singleton const&) = delete;
  Singleton& operator=(Singleton&&) = delete;

  static auto& instance()
  {
    static Singleton obj;
    return obj;
  }

private:
  Singleton() { /* ... */ }
};

int
main()
{
  auto& ref = Singleton::instance(); // OK
  auto copy = Singleton::instance(); // Won't compile
}

您是否尝试删除了singleton的复制构造函数和赋值运算符?是的,您是对的。我应该删除它。这就是我被梅尔·辛格尔顿搞糊涂的原因。如何在没有复制构造函数的情况下使用它??多亏了艾克森,我想我找到了答案。“auto&ref=Singleton::instance();”将解决我的问题。