gpt4 book ai didi

c++ - 在其成员函数返回之前删除对象是未定义的行为吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:03 27 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
C++: Delete this?

我正在尝试创建一个系统来管理游戏的状态。

我当前设计的问题是,当我切换状态时,旧状态会在控制切换到新状态之前被删除。

以下是我的代码的简化版本:

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 对象在更新方法中调用 StateManager::setState 时,将有一段时间在刚刚销毁的对象上调用成员函数。

此行为的完整示例位于 http://ideone.com/WHLzJL。 .请注意在 FirstState::update 返回之前如何调用 FirstState 的析构函数。

这是 C++ 中的未定义行为吗?如果是这样,我应该如何更改我的设计?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com