深拷贝和浅拷贝
在 C++ 中,深拷贝和浅拷贝是两种不同的对象复制方式:
-
浅拷贝:当我们创建一个对象的副本时,如果仅仅复制所有成员变量的数据,那么这就是浅拷贝。这在所有的变量都在栈内存中分配时工作得很好1。但是,如果有些变量是在堆内存中动态分配的,那么复制的对象变量也会引用同一块内存位置1。这将导致二义性和运行时错误,如悬挂指针1。因为两个对象都引用同一块内存位置,所以一个对象中的更改也会反映在另一个对象中1。由于我们希望创建对象的副本,因此浅拷贝不能满足这个目的1。
-
深拷贝:在深拷贝中,通过复制所有变量的数据,并为对象分配相同的内存资源并赋予相同的值,从而创建一个对象。为了执行深拷贝,我们需要显式地定义拷贝构造函数,并根据需要分配动态内存1。此外,还需要在其他构造函数中为变量动态分配内存1。
总的来说,深拷贝和浅拷贝的主要区别在于它们如何处理对象的动态内存。浅拷贝只复制指向动态内存的指针,而不复制动态内存本身。深拷贝不仅复制指向动态内存的指针,还复制动态内存本身。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)