c++ - 继承和删除复制和移动构造函数

标签 c++ c++11 copy-constructor move-constructor

我想要一个具有三级继承的类。我不会移动我的类(class)或复制它们。实际上,它们只会被创建一次。我想测试是否可以删除移动和复制构造函数和赋值,如下所示:

MyClass ( MyClass && ) = delete;
MyClass ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( MyClass && ) = delete;

当我这样做时,我在基类的构造函数和基类的基类中遇到错误:

initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive]

我的构造函数是这样的:

Base(const string & name):BaseOfBase(name){

    };

我的问题是:

  1. 是否可以删除所有移动和复制构造函数以及赋值运算符?
  2. 如果可能,为什么会出现错误?
  3. 如果可能,这是一个不错的选择吗?

最佳答案

您遇到错误是因为显然您在错误的位置删除了您的方法。由于您在它们前面加上了类名,看起来您在实现中删除了它们。正确的删除方法是在类定义中,如下所示:

class foo {
   foo(const foo& ) = delete;
};

关于c++ - 继承和删除复制和移动构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269316/

相关文章:

c++ - 稳定c++中的值

c++ - 将指向成员的指针强制转换为大多数派生类型

c++ - 类初始化 - 属性没有默认构造函数

c++ - OpenSsl 无法读取 DER 格式的证书

c++指针问题 - 通过方法更新指针

c++ - 有没有一种可控的方法可以让我的 C++ 程序在在线评委上变慢?

c++ - C++11 中具有对齐元素的 std::array 类型

c++ - 包含指向派生模板类的基类指针的类的赋值运算符和复制构造函数

c++ - 如何为没有复制构造函数的对象分配索引

javascript - 无法编译android cocos2d文件--Android-Studio