- 浅拷贝:仅复制对象的表面值,包括指针的地址,而不复制指针指向的内容。两个对象可能共享同一块内存。
- 深拷贝:复制对象的全部内容,包括指针指向的动态分配内存,创建一份独立的副本,两个对象互不影响。
深拷贝和浅拷贝的典型应用场景
| 场景 | 默认行为 | 需要深拷贝? | 解决方法 |
|---|---|---|---|
| 指针成员动态分配 | 浅拷贝 | 是 | 自定义拷贝构造函数和赋值 |
| 容器存储指针 | 浅拷贝 | 是(视需求) | 智能指针或深拷贝容器内容 |
| 类赋值操作 | 浅拷贝 | 是 | 重载赋值操作符 |
| 函数返回值 | 浅拷贝 | 是(视设计) | 确保深拷贝或用引用返回 |
| 无指针的简单类 | 浅拷贝(值复制) | 否 | 默认行为即可 |
什么时候不需要特别注意
- 纯值类型对象:如果类只包含基本数据类型(如int、double)或不涉及动态分配内存,默认的浅拷贝(逐成员复制)就足够,因为没有资源共享问题。
- 使用智能指针:如果类使用std::unique_ptr或std::shared_ptr,它们的拷贝行为已经定义好(unique_ptr禁止拷贝,shared_ptr实现引用计数),无需手动实现深拷贝。
- 只读或临时对象:如果对象生命周期短暂且不涉及资源管理,默认浅拷贝通常无害。
640

被折叠的 条评论
为什么被折叠?



