![](/img/trans.png)
[英]Does C++ pointer to an element of a vector become invalid when vector is growing?
[英]C++ std::vector<T*> if you hold a pointer to a pointer element, does it become invalidated upon resize?
假设我创建了std::vector<int*> myVec;
并保留 100 个条目并用值填充向量,以便所有 100 个元素都有有效的指针。 然后我缓存一个指向其中一个元素的指针,
int * x = myVec[60];
然后,如果我 append 另一个int *
由于堆碎片而触发调整大小以及移动,那么指向指针的前一个指针是否失效或指向 memory 中的新位置?
如果我的 memory 服务我是正确的,如果示例是std::vector<int> myVecTwo
具有与上述相同的条件并且我存储了一个类似
int * x = &myVecTwo[60];
并继续到 append 并调整大小,该指针将无效。
所以,我的问题如下。 指向指针的指针会失效吗? 由于 is_trivially_copyable 的新C++ std 功能以及 std::vector 是否使用此类功能或 POD 检查,我不再确定。
指针会在 C++11 中失效吗?
不。
正如您所展示的,在重新分配之后,指向vector
元素的指针,例如int * x = &myVecTwo[60];
将失效。 重新分配后,元素本身会被复制,但元素指针指向的 object 不受影响,则 for int * x = myVec[60];
,重新分配后x
仍然指向同一个object,这与vector
的重新分配无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.