在函数调用期间重新分配的 std::vector 元素的调用函数是否会引起麻烦?

Does calling functions of an element of an `std::vector` which gets reallocated during the function call cause trouble?

我有 std::vectorGameObject。我使用直接指向它们的指针来访问这些 GameObject。 (不用担心指针会失效,我会在 vector 重新分配自身时更新指针)。 GameObject class 有一个函数叫做 load().

因此,在一种情况下,我调用存储在 vector 中的 GameObject 实例的 load()。此函数将另一个 GameObject 推到 vector 的后面。这会导致 vector 到 运行 内存不足并重新分配。(或调整大小)。现在,对 push_back returns 的调用,load() 无法再访问任何 GameObject 实例的成员。该实例仍然存在于同一个向量上。

为什么函数无法访问成员? load 看到的成员包含 junk/incorrect 值。有什么解释吗?

vector不会魔法。它必须通过使用它们的移动构造函数(如果可能)或复制构造函数来移动元素,然后销毁先前位置的旧对象。

因此,在您的情况下,将针对您调用 GameObject::load 的对象调用 GameObject::~GameObject。当然,在 其他地方 有另一个逻辑上相同的对象,但是当 load returns 时你的 this 指针无效。 vector 无法在通话进行时更新您的 this 指针。