深拷贝与浅拷贝
Posted 邓涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。
深拷贝与浅拷贝
关于这两个概念先来看一个例子:
在这个例子中,数据成员是一个int类型的数据m_iCount,它的拷贝构造函数的实现很简单,
当使用右边所示的方法实例化arr2时就会调用拷贝构造函数,也就是直接进行数值的拷贝即可。
将这个例子进行一下修改:
在这个例子当中,增加了一个int *类型的指针数据成员,在构造函数中使用new分配了一段内存,
然后使用指针指向这段内存空间;而拷贝构造函数还是进行简单的赋值拷贝操作,通过上面的方
法来实例化arr2这将会导致两个对象中的指针指向同一段内存空间,也就是实例化arr1时分配的
内存空间,这将会造成非常危险的后果,例如两个对象操作这段内存,两个对象在销毁的时候都
去释放这段内存。
我们将上面的拷贝模式叫做浅拷贝,它只是进行了简单的数值拷贝。
那么我们需要将Array类的拷贝构造函数进行一些修改,使之变成深拷贝,如下所示:
在深拷贝函数中,不再是直接进行数值拷贝,而是再次申请一段新的内存,然后将内存中的数据拷贝过去。
总结:当进行对象拷贝时,不是简单的做数值拷贝,而是将堆内存中的数据也进行拷贝,这种拷贝模式就
叫做深拷贝。
以上是关于深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章