★19.关于移动操作

定义

class A {
public:
    A(A &&) = default;                // 显式定义移动构造操作
    A & operator=(A &&) = default;    // 显式定义移动赋值函数
    virtual ~A() = default;           // 一旦一个类定义了析构函数,此类及其派生类都不会合成移动操作
    std::string i;
};

class B : public A {
public:
    B(B &&) = default;                // 显式定义移动赋值函数
    B & operator=(B &&) = default;    // 显式定义移动赋值函数
};

注意事项

  • 当自己定义了(即使是=default的方式)其中一个普通拷贝控制成员(析构函数,拷贝构造函数,拷贝赋值运算符)或设置为=delete,就不会合成任何移动操作。
  • 因为基类总是需要将析构函数设置为虚的,所以基类和其派生类总是不会合成移动操作,需要显式地定义移动操作。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容