★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,就不会合成任何移动操作。
  • 因为基类总是需要将析构函数设置为虚的,所以基类和其派生类总是不会合成移动操作,需要显式地定义移动操作。

你可能感兴趣的:(★19.关于移动操作)