1.91、什么是浅拷贝(shallow copy)什么是深拷贝(deep copy)?

浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是C++中对象复制的两种基本方式,关键区别在于是否复制对象所拥有的资源(如动态内存)。

浅拷贝(Shallow Copy)

  • • 浅拷贝只复制对象的成员变量的值,包括指针成员的地址,但不复制指针所指向的内存内容。
  • • 结果是原对象和拷贝对象共享同一块资源(如堆内存),修改其中一个会影响另一个。
  • • 浅拷贝通常由编译器自动生成的默认拷贝构造函数实现,即“按位复制”。
  • • 如果对象中包含动态分配资源,浅拷贝会导致悬挂指针、双重释放等严重问题。

深拷贝(Deep Copy)

  • • 深拷贝不仅复制对象的成员变量,还会为指针成员指向的资源重新分配内存,并复制其内容。
  • • 这样,原对象和拷贝对象拥有各自独立的资源,修改一个不会影响另一个。
  • • 深拷贝通常需要程序员显式实现拷贝构造函数和赋值操作符,确保动态资源被正确复制和管理。
  • • 深拷贝避免了浅拷贝带来的内存安全隐患。

简单对比

特性 浅拷贝 深拷贝
复制内容 复制成员变量值(指针复制地址) 复制成员变量及指针指向的内容
资源共享
修改影响 互相影响 互不影响
内存安全风险 有(悬挂指针、双重释放)
实现方式 默认拷贝构造函数 自定义拷贝构造函数和赋值操作符

结论

浅拷贝适用于成员均为值类型的简单对象,深拷贝适用于含有动态资源的复杂对象,避免资源管理错误。理解并正确实现深浅拷贝,是C++面试中考察对象生命周期和资源管理能力的重要点。
获取账号,可以解锁所有文章,有兴趣的朋友可以私聊我。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END