首页 > 代码库 > 深拷贝与浅拷贝
深拷贝与浅拷贝
深拷贝与浅拷贝
关于这两个概念先来看一个例子:
在这个例子中,数据成员是一个int类型的数据m_iCount,它的拷贝构造函数的实现很简单,
当使用右边所示的方法实例化arr2时就会调用拷贝构造函数,也就是直接进行数值的拷贝即可。
将这个例子进行一下修改:
在这个例子当中,增加了一个int *类型的指针数据成员,在构造函数中使用new分配了一段内存,
然后使用指针指向这段内存空间;而拷贝构造函数还是进行简单的赋值拷贝操作,通过上面的方
法来实例化arr2这将会导致两个对象中的指针指向同一段内存空间,也就是实例化arr1时分配的
内存空间,这将会造成非常危险的后果,例如两个对象操作这段内存,两个对象在销毁的时候都
去释放这段内存。
我们将上面的拷贝模式叫做浅拷贝,它只是进行了简单的数值拷贝。
那么我们需要将Array类的拷贝构造函数进行一些修改,使之变成深拷贝,如下所示:
在深拷贝函数中,不再是直接进行数值拷贝,而是再次申请一段新的内存,然后将内存中的数据拷贝过去。
总结:当进行对象拷贝时,不是简单的做数值拷贝,而是将堆内存中的数据也进行拷贝,这种拷贝模式就
叫做深拷贝。
深拷贝与浅拷贝
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。