我的“级别”类中有一个 GameObject*
vector 。
vector<GameObject*> gameObjects;
我像这样向 Vector 添加一个对象:
gameObjects.push_back(new Laser(10, 30));
其中 Laser
是 GameObject
的子类。然后我像这样遍历它们:
void Level::update()
{
for(vector<GameObject*>::const_iterator i = gameObjects.begin(); i != gameObjects.end(); ++i) {
(*i)->update();
}
}
其中 void update()
是类 GameObject
的成员函数。现在我可能会更新一个对象,比如“枪”,它会在它的过程中创建另一个对象,比如“子弹”,就像这样:
level.gameObjects.push_back(new Bullet(position, rotation));
level
是“Level”类的一个实例。这行代码只用于查找,但在该“帧”的末尾,当 level.update()
完成对现有 GameObject
的循环时,它会崩溃。这发生在它退出 for 循环之前。
为什么它会崩溃?我该如何解决这个问题?
最佳答案
向 vector 添加新项目可能需要重新分配,如果新的 size会超过 capacity .发生这种情况时,迭代器是 invalidated .
可能的解决方案:
- 使用索引进行迭代以直接访问 vector 元素(最简单的解决方案)
- 确保足够的容量是reserved在开始使用迭代器之前(并非总是可能)。
关于c++ - 循环遍历 vector 时将对象添加到 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041499/