假定有类T
则下列情况调用的函数是不一样的:
T a = b;
a=b;
第一种情况调用的是拷贝构造函数
第二种情况调用的是赋值运算符。
默认的拷贝构造函数执行的是浅拷贝,在对象涉及到动态分配的存储空间时,会出现问题。
- 在a中修改变量值后,b中的也发生改变。
- 出现内存泄漏(只new但是没有delete就会出现这样的问题)
- 一个地址被多次释放也会出错
要解决上面的问题,就要执行深拷贝
深拷贝使得每一个对象成员都有自己的内存空间。
要执行深拷贝,那么就要自己定义拷贝构造函数。
主要操作在于,对于动态分配的空间,重新new一块出来,再执行strcpy。
下面是一个拷贝构造函数的例子
String::String(const String && T){}
在上面这个例子之中,&&代表的是右值引用,扩大了临时变量的生命周期。