我目前正在研究2D游戏引擎,我已经阅读了auto_ptr以及你应该如何将它们放在标准容器中.
我的引擎有这样的结构:
StateManager - 有很多 - > State's.
在引擎外部的main中创建和分配状态.我希望引擎存储所有状态的列表/向量,以便我可以在命令之间进行更改.
例如:
__CODE__
假设我有下表:
SomeState *test = new SomeState(); StateManager->registerState(test);Run Code Online (Sandbox Code Playgroud)
(这不是我正在做的事情,但它通过我的设置抽象出很多其他并发症)
假设我想得到一张桌子,告诉我有多少游戏适合不同年龄:
std::auto_ptr<SomeState> test(new SomeState()); StateManager->registerState(test.get());Run Code Online (Sandbox Code Playgroud)// 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); }
我当然可以获得单一年龄的价值:
SomeState *test = new SomeState(); StateManager->registerState(test);Run Code Online (Sandbox Code Playgroud)
而且我知道如何获得具有给定项目的项目数量 __CODE__
std::auto_ptr<SomeState> test(new SomeState()); StateManager->registerState(test.get());Run Code Online (Sandbox Code Playgroud)// 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); }
但我无法弄清楚如何做到这两点.
由于我的实际应用程序在具有数百万个条目的表上执行此操作,并且可能必须确定数千个值的计数__CODE__,因此我希望通过在单个查询中执行整个操作来最大化性能.
为什么不使用std :: vector <State>而不担心存储指针?听起来状态列表是固定的,因此在程序的生命周期内任何迭代器都不会失效.
或者,我发现Boost Pointer Container库对这类事情很有用.