【问题标题】:Inheritance and deleting copy and move constructors继承和删除复制和移动构造函数
【发布时间】:2015-10-22 05:15:15
【问题描述】:

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

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. 如果可能的话,这是一个好的选择吗?

【问题讨论】:

  • 通过删除复制构造函数,您可以禁止编译器生成的移动构造函数,因此MyClass ( MyClass && ) = delete; 是多余的(同上赋值运算符)

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 2012-04-24
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多