簡體   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