在函数调用期间重新分配的`std :: vector`元素的调用函数会导致问题吗?

时间:2016-02-09 08:02:38

标签: c++ pointers stl stdvector function-call

我有std::vectorGameObject个。我使用直接指针访问这些GameObject。 (不要担心指针会失效,我会在vector重新定位自己时更新指针)。 GameObject类有一个名为load()的函数。

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

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

1 个答案:

答案 0 :(得分:2)

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

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