C++深浅拷贝
一、核心概念
- 浅拷贝:仅复制成员值(包括指针地址),默认拷贝行为
- 深拷贝:复制指针指向的实际内容,需自定义实现
二、关键区别
| 特性 | 浅拷贝 | 深拷贝 |
|---|---|---|
| 指针复制 | 仅复制地址 | 复制地址和内容 |
| 内存共享 | 是 | 否 |
| 实现方式 | 默认 | 需自定义拷贝构造和赋值运算符 |
| 适用场景 | 无指针成员或需共享数据 | 有指针成员且需独立数据 |
三、浅拷贝实现(仅指针复制)
// 默认拷贝构造函数(浅拷贝)
Shallow(const Shallow& other) : data(other.data) {} // 仅复制指针地址
// 默认赋值运算符(浅拷贝)
Shallow& operator=(const Shallow& other) {
data = other.data; // 仅复制指针地址
return *this;
}
四、深拷贝实现(完整数据复制)
// 深拷贝构造函数
Deep(const Deep& other) : data(new int(*other.data)) {} // 分配新内存并复制值
// 深拷贝赋值运算符
Deep& operator=(const Deep& other) {
if (this != &other) { // 防止自赋值
*data = *other.data; // 复制值
}
return *this;
}
五、补充:延迟拷贝
延迟拷贝是一种优化技术,它推迟实际的数据拷贝操作,直到确实需要修改数据时才进行真正的拷贝。
5.1核心思想
- 共享原始数据:多个对象最初共享同一份数据
- 写时复制:当某个对象需要修改数据时,才创建该对象独有的副本
- 读时共享:只读操作不需要创建副本
5.2延迟拷贝(Copy-on-Write,COW)是一种巧妙结合了浅拷贝和深拷贝优势的技术,它在保持数据安全性的同时提高了性能。
感谢您的阅读和关注! (˶╹ꇴ╹˶)
509

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



