我目前正在研究一个 2D 游戏引擎,并且我已经阅读了有关 auto_ptr 以及如何永远不要将它们放入标准容器中的信息。
我的引擎有这样的结构:
StateManager -- 有很多 --> 状态的。
状态是在引擎之外的 main 中创建和分配的。我希望引擎存储所有状态的列表/向量,以便我可以根据命令在它们之间进行更改。
例如:
SomeState *test = new SomeState();
StateManager->registerState(test);
由于状态仅在应用程序死亡时死亡,我可以使用这种方法吗?
std::auto_ptr<SomeState> test(new SomeState()); StateManager->registerState(test.get());
// 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 应该只维护一个指向状态的指针向量,它不需要拥有所有权。当我想更改引擎中的状态时,我只需更改 activeState 指针以指向在 stateList 向量中找到的所需状态。
这是一个不好的方法吗?