调用已删除的构造函数

Bal*_*ude 1 c++

我有一个C++项目和学习设计模式(我对C++很新).我有一种情况,我认为单身人士将是一个解决方案.(现在等到你们都去之前等待等待:单身人士是baaaaaad.让我们全部投票并烧掉那个异教徒用户!!!!)

我运行了这里找到的示例:https: //stackoverflow.com/a/1008289/2336887

...但在使用C++ 11版本时出现错误.

我的问题不在于是否应该使用Singleton.它已被覆盖得足够多了.

我的问题是:为什么删除公共构造函数而不是简单地保留私有构造函数?如果它停留在那里,则会发生对已删除构造函数的错误调用.我不明白,这让我感到沮丧.有人可以对C++新手有所了解吗?

这是避免转到其他帖子的代码:

 class S {
 public:
     static S& getInstance(){
         static S    instance; 
         return instance;
     }
 private:
     S() {}

 public:
     S(S const&)               = delete;
     void operator=(S const&)  = delete;
 };



 int main() {
     S bus =  S::getInstance();
     return 0;
 }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助......耐心等待.

ps:我本来可以把这个问题添加到原帖中,但是在这一点上我认为它会带来更多的噪音.

Tim*_*all 5

为什么要删除公共构造函数而不是简单地保留私有构造函数呢?

因为公共构造函数是一个复制构造函数.这是被删除的,因为它不需要,不应该使用.私有构造函数是一个默认构造函数,它是内部使用所必需的(在某些时候,必须构造一个单例!)


eer*_*ika 5

为什么要删除公共构造函数而不是简单地保留私有构造函数呢?

单身人士的核心理念是只有一个实例.如果允许复制对象,则可能有多个实例.这就是删除单例的复制构造函数的原因:使单例不可复制.

如果它停留在那里,则会发生对已删除构造函数的错误调用.我不明白,这让我感到沮丧.

由于您尝试复制不可复制的对象,因此出现错误.不要试图复制单身人士.我怀疑你被邀请参考单身人士:

S& bus = S::getInstance();
Run Code Online (Sandbox Code Playgroud)