gpt4 book ai didi

C++ std::vector 如果你持有一个指向指针元素的指针,它会在调整大小时变得无效吗?

转载 作者:行者123 更新时间:2023-12-01 18:55:22 25 4
gpt4 key购买 nike

假设我创建 std::vector<int*> myVec;并保留 100 个条目并用值填充 vector ,以便所有 100 个元素都有有效的指针。然后我缓存一个指向其中一个元素的指针,

int * x = myVec[60];

然后,如果我附加另一个 int *由于堆碎片,它会触发调整大小以及移动,之前指向指针的指针是否会失效,或者它是否指向内存中的新位置?

如果我的内存正确的话,如果这个例子是 std::vector<int> myVecTwo与上面相同的条件,我存储了一个类似

的 ptr
int * x = &myVecTwo[60]; 

并继续追加和调整大小,该指针将无效。

所以,我的问题如下。指向指针的指针会失效吗?由于 is_trivially_copyable 的新 C++ std 功能,我不再确定以及 std::vector 是否使用此类功能或 POD 检查。

在 C++11 中指针会失效吗?

最佳答案

没有。

正如您所展示的,重新分配后,指向 vector 元素的指针(例如int * x = &myVecTwo[60];)将失效。重新分配后,元素本身会被复制,但元素指针指向的对象不会受到影响,那么对于int * x = myVec[60];,重新分配后 x仍然指向同一个对象,这与 vector 的重新分配无关。

关于C++ std::vector<T*> 如果你持有一个指向指针元素的指针,它会在调整大小时变得无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58722300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com