在向量循环时向对象添加对象

时间:2015-03-13 20:35:35

标签: c++ pointers for-loop vector

我的" Level"中有GameObject*的向量类。

vector<GameObject*> gameObjects;

我像这样向Vector添加一个对象:

gameObjects.push_back(new Laser(10, 30));

其中LaserGameObject的子类。然后我像这样循环遍历它们:

void Level::update() 
{
    for(vector<GameObject*>::const_iterator i = gameObjects.begin(); i != gameObjects.end(); ++i) {
        (*i)->update();
    }
}

其中void update()是类GameObject的成员函数。现在,我可能会更新一个对象,比如&#34; gun&#34;,它会在其进程中创建另一个对象,例如&#34; bullet&#34;,就像这样:

level.gameObjects.push_back(new Bullet(position, rotation));

其中level是&#34; Level&#34;的一个实例。类。这行代码只能找到,但在#34; frame&#34;的末尾,当level.update()完成循环现有的GameObject时,它会崩溃。这在它退出for循环之前发生。

为什么会崩溃?如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

如果新的size超过capacity,则可能需要重新分配向量向量中添加新项目。发生这种情况时,迭代器为invalidated

潜在的解决方案:

  • 使用索引迭代以直接访问向量元素(最简单的解决方案)
  • 在开始使用迭代器之前确保容量为reserved(并非总是可行)。