假定有类T

则下列情况调用的函数是不一样的:

T a = b;

a=b;

第一种情况调用的是拷贝构造函数

第二种情况调用的是赋值运算符。

默认的拷贝构造函数执行的是浅拷贝,在对象涉及到动态分配的存储空间时,会出现问题。

  1. 在a中修改变量值后,b中的也发生改变。
  2. 出现内存泄漏(只new但是没有delete就会出现这样的问题)
  3. 一个地址被多次释放也会出错

要解决上面的问题,就要执行深拷贝

深拷贝使得每一个对象成员都有自己的内存空间。

要执行深拷贝,那么就要自己定义拷贝构造函数。

主要操作在于,对于动态分配的空间,重新new一块出来,再执行strcpy。

下面是一个拷贝构造函数的例子
String::String(const String && T){}

在上面这个例子之中,&&代表的是右值引用,扩大了临时变量的生命周期。

你也可能喜欢

发表评论