在std :: vector.reserve()之后重新分配std :: vector

pen*_*ope 0 c++ memory-management

我有一段代码,我首先将一些值放入a中std::vector,然后将其中每个值的地址提供给将要使用它们的对象之一,如下所示:

std::vector < useSomeObject > uso;

// uso is filled

std::vector < someObject > obj;

for (int i=0; i < numberOfDesiredObjects; ++i){
    obj.push_back(someObject());
    obj.back().fillWithData();
}
for (int i=0; i < numberOfDesiredObjects; ++i){
    uso[i].setSomeObject(&obj[i]);
}

// use objects via uso vector
// deallocate everything
Run Code Online (Sandbox Code Playgroud)

现在,因为我有时候是一个风格怪物,我认为这很难看,并且只想使用1 for loop,有点像这样:

for (int i=0; i < numberOfDesiredObjects; ++i){
    obj.push_back(someObject());
    obj.back().fillWithData();
    uso[i].setSomeObject(&obj.back());
}
Run Code Online (Sandbox Code Playgroud)

当然,我不能这样做,因为偶尔会发生重新分配,并且我设置的所有指针都变得无效.

所以,我的问题是:std::vector.reserve()如果您知道自己需要多少并且想要提前分配内存, 我知道这是要走的路.如果我确保我要提前分配足够的内存reserve(),这是否可以保证我的指针保持有效?

谢谢.


边注. 是一个类似的问题,但对我想知道的内容没有答案.只是为了防止它弹出作为对这个问题的第一个评论.

Jam*_*nze 5

事实上,这是使用的主要原因之一reserve.std::vector只要向量的新大小不超过旧容量,就可以保证附加到一个将不会使向量中元素的迭代器,引用或指针无效.