我正在阅读C++ Primer,3rd Ed(Lippman和Lajoie),并且它说当需要重新分配向量以便为添加的更多元素腾出空间时push_back(),元素在新空间中被复制构造然后是析构函数被称为旧元素.我很困惑为什么这是必要的 - 为什么数据不能一点一点地复制?我假设答案与动态内存分配有关,但我目前的推理方法是,即使向量元素处理动态内存,实际存储在元素中的数据也将是指针,这意味着按位复制将保留它们指向的位置并且不会出现任何问题.我可以看到如何重新定位元素指向的动态分配的内存将是一个问题,因为它会使指针无效,但据我所知,向量重新定位没有理由这样做.
有人能给我一个不应该逐位移动的类的简单例子吗?
这可能是最简单(但相当做作)的例子:
class foo
{
int i;
int* pi; // always points to i
};
Run Code Online (Sandbox Code Playgroud)
这里,复制构造函数将保持pi指向的不变量i.编译器本身无法自己找出这种关系,因此需要调用复制构造函数.
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |