![](/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.