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();”将解决我的问题。