深复制和浅复制如何做老师在python中同样存在,但是由于python中没有指针这个概念,所以当时学python时理解这个问题非常困难。实际上,通过这些天的学习,越发的认为c++的语法虽然复杂,但是由于其每个概念都比较清狼来啦晰反而比python更好理解。python中很多语法都有些“模糊”,尤其是它的魔法函数部分,使用的时候总是怕自己理解错误从而造成误用。
在c++中深复制和浅复制最大的区别在“类包含指针类型的数据成员”时。由于默认的复制构造函数完成的是对象成员的数值复制,当原对象含有指针p指向地址xxx时,通过原对象复制得到的新对象的指针p同样指向地址xxx,造小学数学听课笔记成同一个地址xxx被两个对象同时指向,这是非常不安全的,因为任一对象对地址xxx的操作很可能会对另一个对象造成不良影响。下面定义的duck类就包含指针成员foot,该成员指向数组的首地址:
首先定义一个duck对象,然后通过duck
复制得到anotherduck
,那么二者的指针成员foot指向相同的地址。anotherduck
对指针成员foot指向的内存进行操作,和duck的指针成员foot对指向的内存进行操作是等价的,因为两个对象的foot指针都指向相同的地址,这就是不安全的来源:
此外,为了证明原对象和新对象的foot指针都指向相同的地址,可以查看一下:
总之,上面的现象就是浅复制,这种浅复制很可能带来不安全因素,这种不安全同样体现在内存释放时(同一个内存不能释放两次),所以需要使用下面将要介绍的深复制。
按照掌握的资料,深复制需要编写赋值构造函数,创建成员指针所指向内存的新副本。比如上一节定义的duck类指针成员foot,复制构造函数需要创建foot指向的内存的新副本:
其中第1步目的是创建新的内存空间,让新对象的行政工作内容指针成员指向新的内存,而不是和原对象指向相同的内存,同时必须保证新的内存所存储的类型和原对象相同,都是i2014企业退休人员养老金调整方案nt类型的2个元素的数组。第2步的目的是将原对象指针所指向的数组的值,全部复制到新对象指所针指向的数组中。经过上面的两个步骤,深度复制完成。
为了确保原对象duck和新对象anotherduck的foot指针所指向的地址不同,可以进行下面的测试,输出两个foot指向的地址:
到此这篇关于c++深复制和浅复制讲解的文章就介绍到这了,更多相关c++深复制和浅复制内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-06 02:40:30,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/84467cb41f8d9907eefbe44d78df83c1.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++深复制和浅复制讲解.doc
本文 PDF 下载地址:C++深复制和浅复制讲解.pdf
留言与评论(共有 0 条评论) |