我有一段代码,我首先将一些值放入 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
现在,由于我有时有点风格怪胎,我认为这很丑陋,并且只想使用 1 个 for 循环,有点像这样:
for (int i=0; i < numberOfDesiredObjects; ++i){
obj.push_back(someObject());
obj.back().fillWithData();
uso[i].setSomeObject(&obj.back());
}
当然,我不能这样做,因为偶尔会发生重新分配,并且我设置的所有指针都变得无效。
所以,我的问题是:
我知道std::vector.reserve()
如果你知道你需要多少并且想要提前分配内存,那么我知道这是要走的路。如果我确保我正在尝试提前分配足够的内存reserve()
,这是否保证我的指针将保持有效?
谢谢你。
边注。 这是一个类似的问题,但没有我想知道的答案。只是为了防止它作为对该问题的第一条评论弹出。