我编写了以下代码以查看浅表副本。我一直期望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
的浅表副本仍然是副本。
[v1
和v2
有他们自己的n
副本,更改一个不会更改另一个。
如果要查看所需的浅表复制行为,请使用指针v
。此副本only复制指针,而不是它指向的内存,即,更改v1.v
指向的值之一将更改v2.v
指向的值。