正如Scott Meyers在" Effective Modern C ++"中指出的那样,如果一个类定义了一个析构函数,就不会生成移动构造函数。
我不清楚这对于需要定义(默认)虚拟析构函数的抽象基类意味着什么。
我不希望我的基类中缺少自动生成的方法来阻止在任何派生类中自动生成方法。
焦点仅在于派生类,因为抽象基类没有任何数据成员,因此移动和复制基类之间没有区别。然而,如果派生类的基础只能复制但不能移动,那对于派生类意味着什么呢?
以下类定义中的哪些行是不必要的?
struct AbstractBase {
AbstractBase () = default;
AbstractBase (AbstractBase const &) = default;
AbstractBase (AbstractBase &&) = default;
AbstractBase & operator = (AbstractBase const &) = default;
AbstractBase & operator = (AbstractBase &&) = default;
virtual ~AbstractBase () = default;
virtual void f () = 0;
};