拷贝构造函数和浅拷贝
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
的浅拷贝仍然是一个拷贝。
v1
和 v2
有自己的 n
副本,更改一个不会更改另一个。
如果您想看到您期望的浅拷贝行为,请使用指针 v
。此副本 仅 复制指针,而不是它指向的内存,即更改 v1.v
指向的值之一将更改 v2.v
指向的值.
我写了下面的代码来看浅拷贝。我希望 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
。此副本 仅 复制指针,而不是它指向的内存,即更改 v1.v
指向的值之一将更改 v2.v
指向的值.