拷贝构造函数和浅拷贝

copy constructor and shallow copy

我写了下面的代码来看浅拷贝。我希望 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;
}

你没有做错任何事,只是 int 的浅拷贝仍然是一个拷贝。

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

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