1.91、什么是浅拷贝(shallow copy)什么是深拷贝(deep copy)?
浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是C++中对象复制的两种基本方式,关键区别在于是否复制对象所拥有的资源(如动态内存)。
浅拷贝(Shallow Copy)
- • 浅拷贝只复制对象的成员变量的值,包括指针成员的地址,但不复制指针所指向的内存内容。
- • 结果是原对象和拷贝对象共享同一块资源(如堆内存),修改其中一个会影响另一个。
- • 浅拷贝通常由编译器自动生成的默认拷贝构造函数实现,即“按位复制”。
- • 如果对象中包含动态分配资源,浅拷贝会导致悬挂指针、双重释放等严重问题。
深拷贝(Deep Copy)
- • 深拷贝不仅复制对象的成员变量,还会为指针成员指向的资源重新分配内存,并复制其内容。
- • 这样,原对象和拷贝对象拥有各自独立的资源,修改一个不会影响另一个。
- • 深拷贝通常需要程序员显式实现拷贝构造函数和赋值操作符,确保动态资源被正确复制和管理。
- • 深拷贝避免了浅拷贝带来的内存安全隐患。
简单对比
特性 | 浅拷贝 | 深拷贝 |
复制内容 | 复制成员变量值(指针复制地址) | 复制成员变量及指针指向的内容 |
资源共享 | 是 | 否 |
修改影响 | 互相影响 | 互不影响 |
内存安全风险 | 有(悬挂指针、双重释放) | 无 |
实现方式 | 默认拷贝构造函数 | 自定义拷贝构造函数和赋值操作符 |
结论
浅拷贝适用于成员均为值类型的简单对象,深拷贝适用于含有动态资源的复杂对象,避免资源管理错误。理解并正确实现深浅拷贝,是C++面试中考察对象生命周期和资源管理能力的重要点。
获取账号,可以解锁所有文章,有兴趣的朋友可以私聊我。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1899
文章版权归作者所有,未经允许请勿转载。
THE END