C++中对象的复制与对象之间的相互赋值

一.对象之间的复制
其一般的两种形式为:
1.类名 对象名1 = 对象名2;(注意此处与赋值的区别)
2.类名 对象2(对象1);

普通构造函数与复制构造函数的区别:
1)在形式上:
类名(形参表列); //普通构造函数的声明,如Box(int h,int w,int len);
类名(类名& 对象名); //复制构造函数的声明,如Box(Box &b);

2) 在建立对象时,实参类型不同
系统会根据实参的类型决定调用普通构造函数或复制构造函数。如
Box box1(12,15,16); //实参为整数,调用普通构造函数
Box box2(box1); //实参是对象名,调用复制构造函数

二.对象之间的相互赋值
对象赋值的一般形式为:
对象名1 = 对象名2;
注意对象名1和对象名2必须属于同一个类。例如
Student stud1,stud2; //定义两个同类的对象
stud2=stud1; //将stud1赋给stud2

特别说明:
*类的数据成员中不能包括动态分配的数据,否则在赋值时可能出现严重后果 ,答案如下:
问题本质是,如果某个类的对象a里面有动态申请的数据,当你把a直接复制给同一个类的对象b的时候,a中的动态指针也给了b,这样a,b中的指针指向同一块内存.这样无论a或者b释放内存都会导致另外一个访内违例崩溃.
解决这个问题需要自己重载赋值运算符和拷贝构造函数.如果不想重载,并且也不喜欢出现错误,那么就把这两类函数声明为私有。*

猜你喜欢

转载自blog.csdn.net/c243311364/article/details/81214913