繁体   English   中英

C++ std::vector<t*> 如果您持有指向指针元素的指针,它会在调整大小时失效吗?</t*>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM