调用的已删除构造函数
Call to deleted constructor of
我有一个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!)
相关文章:
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- std::ofstream 作为类成员删除复制构造函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 具有已删除移动和复制构造函数的类的就地构造
- 聚合初始化和删除的复制构造函数,也称为不可复制的 obejcts 作为字段
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 我的类中几乎所有的构造函数和解构函数都被隐式定义为已删除?
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 调用类模板中隐式删除的复制构造函数
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 编译器在C++中调用另一个函数时,在参数中查找已删除的构造函数
- 在构造函数中删除后继续执行
- 删除了在初始值设定项中调用的构造函数
- 删除使数据处于"错误状态"的默认构造函数的模式?
- C ++(为什么)确实移动构造函数删除运算符=
- 仅仅以避免隐式复制构造函数删除,使用shared_ptr而不是unique_ptr作为类成员明智