如何在没有复制构造函数的情况下使用 Meyer 的单例?

How to use Meyer's singleton without copy constructor?

这就是有人提到的迈耶单例。

static Singleton& getinstance()
{
     static Singleton s_obj;
     return s_obj;
}

但是用户如何使用这个 getinstace() API?

如果我这样用的话

Singleton myobj = getinstance();

我真的会复制 s_obj 对吧? 所以我现在有2个实例myobjs_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
}