【发布时间】:2014-06-17 13:27:57
【问题描述】:
我目前正在大学学习 C++ 课程。我理解使用向量进行浅拷贝和深拷贝的一般概念,但是我的教科书中有一个例子让我感到困惑。
请假设它是一个实现不佳的向量,没有定义复制构造函数,因此它只执行数据的浅拷贝。
我明白第一部分发生了什么
在声明中
vector<int> v2(v1);vector
v1作为常量引用参数传递给向量副本 构造函数,所以v1不能被改变,那么变量v2就是 初始化为向量v1的副本。每个数据字段将是 复制,以后对v2所做的任何更改都不应影响v1。什么时候v1.the_data中的值被复制,v1.the_data和v2.the_data将指向同一个数组因为
v1.the_data和v2.the_data指向同一个对象,所以 声明v1[2] = 10;也改变了
v2[2]。因此,v2被认为是浅拷贝v1.
但是我很难理解这部分。我不太清楚为什么v2.num_items 在浅拷贝中也不会改变。
声明
v1.push_back(20);将
20插入v1[5]并将v1.num_items更改为6,但将 不改v2.num_items。
我目前对此的想法是 v1.the_data 和 v2.the_data 指向内存中的同一个位置,因此它们“共享”同一个向量,因此当将 20 添加到它的末尾时,两个向量都应该获得一个额外的整数。
如果能帮助我理解为什么在修改 v1 时不会更改 v2 的项目数,我将不胜感激。
【问题讨论】:
-
在您教科书的“引用部分”中?!
-
除非引用的部分描述了错误实现向量的行为,否则它就是垃圾。
-
它来自我的导师提供的讲义。我认为它是一个错误实现的向量。我将编辑我的帖子以明确这一点。
标签: c++ vector copy deep-copy shallow-copy