复制构造函数和浅表副本

问题描述 投票:0回答:1

我编写了以下代码以查看浅表副本。我一直期望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个回答
0
投票

您没有做错任何事情,只是int的浅表副本仍然是副本。

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

如果要查看所需的浅表复制行为,请使用指针v。此副本only复制指针,而不是它指向的内存,即,更改v1.v指向的值之一将更改v2.v指向的值。

© www.soinside.com 2019 - 2024. All rights reserved.