我有std::vector
个GameObject
个。我使用直接指针访问这些GameObject
。 (不要担心指针会失效,我会在vector
重新定位自己时更新指针)。 GameObject
类有一个名为load()
的函数。
因此,在一种情况下,我调用load()
的{{1}}实例,GameObject
存储在vector
中。此函数会在GameObject
的后面推送另一个vector
。这会导致vector
内存不足并重新分配。(或调整大小)。现在,然后该push_back
的调用返回,load()
无法再访问任何GameObject
实例的成员。该实例仍然存在于同一个向量中。
为什么该功能无法访问会员? load
看到的成员包含垃圾/不正确的值。有什么解释吗?
答案 0 :(得分:2)
vector
无法施展魔法。它必须通过使用移动构造函数(如果可能)或复制构造函数来移动元素,然后销毁先前位置中的旧对象。
因此,在您的情况下,将为您调用GameObject::~GameObject
的对象调用GameObject::load
。当然,还有另一个逻辑上相同的对象其他地方,但当this
返回时,您的load
指针无效。在通话过程中,vector
无法更新this
指针。