c++:什么是深拷贝什么是浅拷贝!

CSDN上转载的一个不错的比喻:

老师给你们留了作业,你们班只有小A一个人会写,其他人都需要copy他的作业。  

如果你们都是通过浅拷贝来完成作业,那么就相当与“在你需要的时候,小A会把作业借给你”。   

例 如,老师对小B说“去把你的作业拿来给我看看”,小B赶快找小A借作业给老师看。老师又要看小C的作业,小C也只能找小A借过来应付老师。总之老师如果一 个一个的检查作业,你们都能应付,因为你们只有一本作业互相借着看一下就OK了。如果老师说“全班把作业一起交上来”,那你们就完蛋了。

深拷贝就是每个人都实实在在的抄了一份作业,每个人的作业都是自己抄来的,所以老师收全班的作业你们也不怕,要多少本就给他多少本,呵呵。

新浪上转载的技术文章片段:


浅拷贝和深拷贝之间的区别:浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对 象中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建 一个新的和原是对象中对应字段相同(内容相同)的字段,也就是说这个引用和原是对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始 对象中对应字段的内容。所以对于原型模式也有不同的两种处理方法:对象的浅拷贝和深拷贝。


所以使用浅拷贝,对于对象的引用成员,仅仅是拷贝了它的引用,修改拷贝对象的引用成员也会同时修改原对象的相应成员。而深拷贝则是一直拷贝到值类型成员为 止。个人理解,如果要对一个链表进行深拷贝,则需要创建这个链表中的所有表节点对象,再将这些对象依照原来的关系连接起来,这时存在两条链表,内存中增加 了一倍的存储(增加了n个对象引用,以及为这些对象分配的n个空间)。而如果进行浅拷贝,只是拷贝了一个链表对象引用,并为这个引用分配了相应的空间,内 存中仅仅是多了一个对象的引用(4个字节,栈区分配)以及一个对象(堆区分配)。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值