解释C++深拷贝和浅拷贝
2022/3/21 14:58:05
本文主要是介绍解释C++深拷贝和浅拷贝,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我:
当类的属性中有指针变量时,内存空间是动态分配的,如果使用浅拷贝,只能将地址拷贝给新对象,需要使用深拷贝将地址指向的内容也拷贝给新对象。
书本解释:
浅拷贝:将原对象中每一个成员字段的值都拷贝到新对象中。这对于普通变量来说没有问题,但是对于指针型变量则未必成立。因为指针所指的那些内存都是动态分配的,并不会自动得到拷贝。这导致原对象与新对象中的字段,全部指向同一块动态分配的内存。由系统提供的拷贝构造,赋值运算符,执行的都是浅拷贝
深拷贝:不仅拷贝原对象中的每一个字段,而且将动态分配给该字段的内存内容一并拷贝过来。所以在面对有指针属性变量时,我们必须编写拷贝函数,并重载运算符
理解:原对象与新对象指针指向同一块动态内存的弊端:
①指针变量上存储的是另一个变量的地址,浅拷贝只是将这个地址拷贝给新对象,并没有给该地址上存储的变量开辟空间,所以如果出现,原对象已经将改地址释放了,如果新对象再次进行释放,造成重复释放同一块内存。
②两个指针指向同一块内存空间,任意一个指针对该内存进行操作,都会影响到另外一个指针。
这篇关于解释C++深拷贝和浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享