auto_ptr和containers - C++

Joh*_*ohn 3 c++ auto-ptr

我目前正在研究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());

// 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); }

Run Code Online (Sandbox Code Playgroud)

我当然可以获得单一年龄的价值:

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());

// 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); }

Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做到这两点.

由于我的实际应用程序在具有数百万个条目的表上执行此操作,并且可能必须确定数千个值的计数__CODE__,因此我希望通过在单个查询中执行整个操作来最大化性能.

Fer*_*cio 9

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

或者,我发现Boost Pointer Container库对这类事情很有用.

  • 您不要将auto_ptrs与boost :: ptr_vector一起使用.你只需将它指向一个裸指针,ptr_vector就可以获得它的所有权. (3认同)