【问题标题】:copy constructor and shallow copy拷贝构造函数和浅拷贝
【发布时间】:2020-06-08 22:04:11
【问题描述】:

我写了下面的代码来看看浅拷贝。我希望 v2 是 v1 的浅表副本,因为没有定义复制构造函数,所以我希望更改 v1.n 也会导致 v2.n 更改,但事实并非如此。我做错了什么?

#include<iostream>
using namespace std;
class Vector
{
  public:
  int n;
  float *v;

  Vector();

};
Vector::Vector()
{
  v = new float[100];
  n = 100;
  cout<<"Constructor called"<<endl;
}


int main()
{
  Vector v1;
  v1.n=5;
  Vector v2=v1;
  v1.n=6;
  cout <<"Vector v1 has n value: "<<v1.n<<endl;
  cout <<"Vector v2 has n value: "<<v2.n<<endl;

  return 0;
}

【问题讨论】:

  • 如果你想要浅拷贝行为,请创建一个指针。

标签: c++ oop copy-constructor shallow-copy


【解决方案1】:

你没有做错什么,只是int的浅拷贝仍然是一个拷贝。

v1v2 拥有自己的n 副本,更改一个不会更改另一个。

如果您想查看预期的浅拷贝行为,请使用指针v。此副本复制指针,而不是它指向的内存,即更改v1.v 指向的值之一将更改v2.v 指向的值。

【讨论】:

  • 所以如果我给数组元素赋值,我应该看到它们的浅拷贝行为,而不是像 int 这样不涉及指针的数据成员?
  • 是的,没错。也编辑了答案以明确这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多