调用的已删除构造函数



我有一个C++项目,正在学习设计模式(我对C++很陌生)。我曾经遇到过这样一种情况,我认为单身汉将是一个解决方案。(现在等一下,等一下,然后你们都走:单身人士都是baaaaad。让我们都投票吧,烧死那个异端用户!!!)

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

但是我在使用C++11版本时遇到了一个错误。

我的问题不在于是否应该使用辛格尔顿。它已经被覆盖得绰绰有余。

我的问题是:为什么要删除公共构造函数而不简单地保留私有构造函数?如果它停留在那里,则会发生对已删除构造函数的错误调用。我不明白,不理解让我很沮丧。有人能介绍一下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;
}

谢谢你的帮助。。。和耐心。

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

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

singleton的核心思想是只有一个实例。如果允许复制对象,则可能存在多个实例。这就是删除singleton的复制构造函数的原因:使singleton不可复制。

如果它停留在那里,则会发生对已删除构造函数的错误调用。我不理解,不理解让我很沮丧。

由于试图复制不可复制的对象,因此出现错误。不要试图复制单身汉。我怀疑你应该引用singleton:

S& bus = S::getInstance();

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

因为公共构造函数是一个复制构造函数。它被删除,因为它不需要也不应该被使用。私有构造函数是一个默认的构造函数,它是内部使用所必需的(在某些情况下,必须构造一个singleton!)

相关内容

最新更新