拷贝构造函数与赋值运算符
时间:2010-09-18 来源:zyd_cu
对于C++而言,简单类型的赋值运算,参数传递都是通过简单拷贝变量的值实现,对于简单的类,也可通过逐个成员拷贝的方式实现,但当类中有指针的情况下,简单的成员拷贝(浅拷贝)很容易导致问题,这时,类需要重载自己的赋值运算符,以及实现拷贝构造函数。
拷贝构造函数主要用于以下场合:
1. 一个对象以值传递的方式传入函数体
2. 一个对象以值传递的方式从函数返回
3. 一个对象需要通过另外一个对象进行初始化
如下例所示,如果不重载赋值运算符和实现拷贝构造函数,则当a赋值给b时,通过简单的逐个成员赋值,a、b的value指向同一内存单元,当b离开其作用域时,b对象被析构,b的value指向的存储单元被释放(亦即a的value指向的存储单元),然后用a对c赋值,a和c对指向一片不确定的存储区域,main结束时,a、c对象被析构,这片不确定的空间被delete两次;而重载赋值运算符和实现拷贝构造函数后,就不会出现上述的问题。
#include <iostream> |