C++拷贝构造函数与赋值操作符的区别
1、定义和用途不同
拷贝构造函数
是特殊的构造函数,通过另一个对象来初始化新对象。
比如:ClassA obj1 = obj2;或 ClassA obj1(obj2);
赋值操作符
将一个对象的内容赋值给另一个已经存在的对象。
比如:obj1 = obj2;
2、调用时机
拷贝构造函数
当一个新对象初始化时以另一个对象为参数时,调用拷贝构造函数
比如:
1、函数参数:函数参数以值传递的方式
2、函数返回值:函数以值传递的方式
赋值操作符
当一个已经存在的对象被另一个对象赋值时,调用赋值操作符
3、实现差异
拷贝构造函数
构造对象的过程中被调用,无需担心内存泄漏,因为对象内存或资源还没分配
赋值操作符
要先处理已有对象的内存或资源,避免内存或资源泄漏,然后才能赋值对象的内容
4、编译器的行为
如果没有定义拷贝构造函数或赋值操作符,编译器会默认提供,执行成员逐个赋值。
注意:
备注:如果类中有指针,需要自定义实现拷贝构造或赋值操作符,避免浅拷贝带来的问题(比如:双重释放内存)
学习链接:https://github.com/0voice