gpt4 book ai didi

C++:自动 vector 重新分配调用复制构造函数?为什么?

转载 作者:可可西里 更新时间:2023-11-01 17:38:20 30 4
gpt4 key购买 nike

我正在阅读 C++ Primer,第 3 版(Lippman 和 Lajoie),它说当需要重新分配 vector 以便为使用 push_back() 添加的更多元素腾出空间时,元素在新空间中复制构造,然后在旧元素上调用析构函数。我很困惑为什么这是必要的——为什么不能逐位复制数据?我假设答案与动态内存分配有关,但我目前的推理是即使 vector 元素处理动态内存,实际存储在元素中的数据将是指针,这意味着按位复制将保留它们指向的位置不会出现任何问题。我可以看到如何重新定位元素指向的动态分配的内存将是一个问题,因为它会使指针无效,但据我所知, vector 重新定位没有理由这样做。

谁能给我一个不应逐位移动的类的简单示例?

最佳答案

这可能是最简单的(但相当人为的)示例:

class foo
{
int i;
int* pi; // always points to i
};

在这里,复制构造函数将保持 pi 指向 i 的不变性。编译器本身无法自行找出这种关系,因此需要调用复制构造函数。

关于C++:自动 vector 重新分配调用复制构造函数?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165924/

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