调用在函数调用期间重新分配的“std::vector”元素的函数是否会导致麻烦

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

本文关键字:元素 vector 函数 是否 麻烦 std 新分配 调用 分配 函数调用      更新时间:2023-10-16

我有一个GameObject s的std::vector。我使用指向它们的直接指针访问这些GameObject。(不用担心指针失效,我会在指针vector重新实现时更新指针)。GameObject类有一个名为 load() 的函数。

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

为什么函数无法访问成员?load看到的成员包含垃圾/不正确的值。有什么解释吗?

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

因此,在您的情况下,将为您调用的对象调用GameObject::~GameObject GameObject::load .当然,其他地方还有另一个逻辑上相同的对象,但是当load返回时,您的this指针无效。vector无法在呼叫过程中更新this指针。

相关文章: