std :: vector的替代方法,因为重新分配使指向元素的指针无效

Adl*_*l A 4 c++ pointers stdvector visual-studio-2015

这可能是一个新问题(我),但我已尽可能多地搜索以找到解决以下问题的方法

我有以下场景(当然很重要):

class Container
{
std::vector<Object> obj;
};

class Pointers
{
std::vector<Object*> obj_ptr;
};
Run Code Online (Sandbox Code Playgroud)

我有一个例程,它将Object类型的元素推回到Container中的向量obj,然后将指向同一元素的指针推回到obj_ptr.

整个想法是obj_ptr [i] == &obj [i]在整个程序的整个生命周期.

我遇到的问题是,每当obj的容量需要增加所有指针都无效时,使obj_ptr完全无用.我使用最大预期大小(大约10 ^ 7)尝试了两个obj.reserve()并初始化具有相同大小的向量.问题仍然存在.

不确定它是否重要,但我正在使用VS 2015 Com.

谢谢!

πάν*_*ῥεῖ 7

常见的方法是使用智能指针

class Container {
    std::vector<std::unique_ptr<Object>> obj;
};
Run Code Online (Sandbox Code Playgroud)

要么

class Container {
    std::vector<std::shared_ptr<Object>> obj;
};
Run Code Online (Sandbox Code Playgroud)

取决于您的用例(语义).

  • @PeteBecker:但是`obj[i]-&gt;get() == obj_ptr[i]` 在重新分配后仍然为真。我认为这就是答案的重点。 (2认同)
  • 对愚蠢的编辑感到抱歉;我必须这样做才能解开问题,这样我才能取消我的反对票。 (2认同)