当我做:
for(i=0; i<size; i++){
//create objectA here
vectorA.push_back(objectA);
pvectorA.push_back(&vectorA[i]);
}
pvectorA的某些元素是垃圾。但是,当我这样做时:
for(i=0; i<size; i++){
//create objectA here
vectorA.push_back(objectA);
}
for(i=0; i<size; i++){
pvectorA.push_back(&vectorA[i]);
}
一切正常。为什么会这样呢?
阅读std :: vector :: push_back的文档
首先说明:
在向量的最后一个元素之后,在向量的末尾添加一个新元素。val的内容被复制(或移动)到新元素。
这有效地将容器大小增加了一个,这会导致已分配的存储空间的自动重新分配,前提是(且仅当)新向量大小超过当前向量容量时。
然后关于迭代器的有效性:
如果发生重新分配,则与容器相关的所有迭代器,指针和引用都将失效。
因此,当您将对象添加到向量中时,指向该向量中的对象的所有指针都可能变为无效-除非您已保证向量具有足够capacity
的std::vector::reserve
。
无效意味着指针不再指向有效对象,并且对其取消引用将具有未定义的行为。
在后面的代码中,在存储指针之后再也不会将对象添加到指向的向量中,因此指针是有效的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句