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

Gov*_*van 0 c++ copy-constructor move-constructor c++11

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

MyClass ( MyClass && ) = delete;
MyClass ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( MyClass && ) = delete;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在基类构造函数和基类的基础上得到一个错误:

initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我的构造函数是这样的:

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

    };
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

Ser*_*eyA 5

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

class foo {
   foo(const foo& ) = delete;
};
Run Code Online (Sandbox Code Playgroud)