gpt4 book ai didi

c++ - auto_ptr 和容器 - C++

转载 作者:太空狗 更新时间:2023-10-29 19:38:58 27 4
gpt4 key购买 nike

我目前正在研究 2D 游戏引擎,我已经阅读了有关 auto_ptr 的内容以及如何永远不要将它们放在标准容器中。

我的引擎有这样的结构:

StateManager -- 有很多 --> 状态。

状态是在引擎外部的 main 中创建和分配的。我希望引擎存储所有状态的列表/vector ,以便我可以根据命令在它们之间切换。

例如:

SomeState *test = new SomeState();
StateManager->registerState(test);

由于当且仅当应用程序终止时状态才会终止,我可以使用这种方法吗?

std::auto_ptr<SomeState> test(new SomeState());
StateManager->registerState(test.get());<p></p>

// Inside StateManager
State *activeState;
// State manager then maintains a vector
std::vector<State*> stateList;
// and upon registerState it adds the pointer to the vector
void registerState(State *state) {
stateList.push_back(test);
}

StateManager 应该只维护指向状态的指针 vector ,它不需要取得所有权。当我想更改引擎中的状态时,我只需更改 activeState 指针以指向在 stateList vector 中找到的所需状态。

这是一个糟糕的方法吗?

最佳答案

为什么不用 std::vector 而不用担心存储指针?听起来状态列表是固定的,因此在程序的生命周期内任何迭代器都不会失效。

或者,我找到了 Boost Pointer Container库对这类事情很有用。

关于c++ - auto_ptr 和容器 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236767/

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