我有一个基础的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个特殊成员函数似乎相当臃肿。
State
中的这些空定义方法有什么不妥之处吗?它们只是传递(状态机无论如何都会调用它们),派生类可以选择是否重写它们。 - undefined