C++中复制构造函数(深度复制和浅复制(简单叙述))

来源:互联网 发布:星星知我心2007 编辑:程序博客网 时间:2024/05/17 22:39
当用一个对象去初始化另一个对象的时候,就会去调用复制构造函数。举个例子:
Class a = Class(2,1);Class b = a;

其中的b 对象就是调用了复制构造函数后生成的对象。

当函数按值传递给对象或者函数返回对象的时候,都会使用复制构造函数。

默认复制构造函数是逐个复制非静态成员的值,因为静态成员是独立于每个对象而存在的。这种复制称为浅复制。

例如,一个String类型对象指向一片内存,那么使用默认复制构造函数,将把这个地址赋给新值。使两个指针指向同一个对象。这样当调用析构函数,释放对象时将会出错,试图去释放以释放的内存会报错。

这时候就需要深度复制了。将去复制指向的值。而不是指针值。也就是重新去调用new操作符生成一个新的成员。

这次讲的比较少,因为下班回来后真的好累。书看进去的效率不是很高。以后会渐渐补完整。


接下来稍稍说下 重载的=操作符和复制构造函数的关系,其实,=操作符是在两个已经创建的对象之间的操作,而复制构造函数就是,这个对象原来没有,去初始化这个对象才会调用的。