C++ 复制构造函数和浅复制
我编写了以下代码以查看浅拷贝。我希望v2是v1的一个浅拷贝,因为没有定义拷贝构造函数,所以我希望更改v1.n也会导致v2.n发生更改,但事实并非如此。我做错了什么C++ 复制构造函数和浅复制,c++,oop,copy-constructor,shallow-copy,C++,Oop,Copy Constructor,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&
#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;
}
#包括
使用名称空间std;
类向量
{
公众:
int n;
浮动*v;
向量();
};
向量::向量()
{
v=新浮点数[100];
n=100;
你没有做错什么,只是一个int
的浅拷贝仍然是一个拷贝
v1
和v2
有各自的n
副本,更改一个副本不会更改另一个副本
如果希望看到预期的浅层复制行为,请使用指针v
。如果希望浅层复制行为成为指针,则此副本仅复制指针,而不复制其指向的内存,即更改v1.v
指向的一个值将更改v2.v
指向的值。因此如果我给数组的元素赋值,我应该看到它们上的浅层复制行为,但不应该看到数据成员上的浅层复制行为,不涉及像int这样的指针?是的,这是正确的。编辑答案也是为了弄清楚这一点。