继承和删除复制和移动构造函数
Inheritance and deleting copy and move constructors
我想要 class 三级继承。我不会移动我的 classes 或复制它们。实际上,它们只会被创建一次。我想测试是否可以删除移动和复制构造函数和赋值,如下所示:
MyClass ( MyClass && ) = delete;
MyClass ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( MyClass && ) = delete;
当我这样做时,我在基础 class 构造函数和基础 class 的基础中遇到错误:
initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive]
我的构造函数是这样的:
Base(const string & name):BaseOfBase(name){
};
我的问题是:
- 是否可以删除所有移动和复制构造函数和赋值运算符?
- 如果可能的话,为什么我会收到错误消息?
- 如果可以的话,是不是一个不错的选择?
您遇到错误是因为显然您在错误的地方删除了您的方法。由于您在它们前面加上 class 名称,看起来您正在实施中删除它们。正确的删除方式在class定义中,如下所示:
class foo {
foo(const foo& ) = delete;
};
我想要 class 三级继承。我不会移动我的 classes 或复制它们。实际上,它们只会被创建一次。我想测试是否可以删除移动和复制构造函数和赋值,如下所示:
MyClass ( MyClass && ) = delete;
MyClass ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( const MyClass & ) = delete;
MyClass & MyClass :: operator= ( MyClass && ) = delete;
当我这样做时,我在基础 class 构造函数和基础 class 的基础中遇到错误:
initializing argument 1 of ‘Base::Base(const int&)’ [-fpermissive]
我的构造函数是这样的:
Base(const string & name):BaseOfBase(name){
};
我的问题是:
- 是否可以删除所有移动和复制构造函数和赋值运算符?
- 如果可能的话,为什么我会收到错误消息?
- 如果可以的话,是不是一个不错的选择?
您遇到错误是因为显然您在错误的地方删除了您的方法。由于您在它们前面加上 class 名称,看起来您正在实施中删除它们。正确的删除方式在class定义中,如下所示:
class foo {
foo(const foo& ) = delete;
};