我有一个State
带有虚拟默认析构函数的基接口类。
class State {
public:
virtual void event() = 0;
virtual ~State() = default; // relevant part
virtual void onCreate() {}
virtual void onDestroy() {}
virtual void onActivate() {}
virtual void onDeactivate() {}
};
然后是一些继承自它的类:
class GameState : public State {
public:
void event() override;
// ...
};
class MenuState : public State {
public:
void event() override;
// ...
};
如果用户没有定义复制操作或析构函数,编译器会生成默认的移动操作。如果没有用户定义的移动操作,编译器会生成默认的复制操作。
我是否通过声明虚拟默认析构函数来纠正我已经有效地删除了默认移动操作?
如果基类隐式删除了它的移动操作,并且基类只是一个没有数据成员的接口,那么移动操作是否适用于派生类?
在这里遵循 5 规则真的明智吗?显式删除或默认所有 5 个特殊成员函数似乎相当臃肿。