可能重复:
C++:删除这个?
我正在尝试创建一个系统来管理游戏的状态。
我当前设计的问题是,当我切换状态时,旧状态会在控制切换到新状态之前被删除。
以下是我的代码的简化版本:
class StateManager;
class State
{
public:
virtual void update(StateManager &manager)= 0;
virtual ~State(){}
};
class StateManager
{
public:
void setState(std::unique_ptr<State> && newState )
{
currentState = std::move(newState);
}
std::unique_ptr<State> currentState;
void run()
{
currentState->update(*this);
}
};
请注意,如果 State 对象在 update 方法中调用 StateManager::setState 时,将有一段时间在刚刚销毁的对象上调用成员函数。
此行为的完整示例位于http://ideone.com/WHLzJL。请注意在 FirstState::update 返回之前如何调用 FirstState 的析构函数。
这是 C++ 中未定义的行为吗?如果是这样,我应该如何改变我的设计?