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核心思想

  1. 共享原始数据:多个对象最初共享同一份数据
  2. 写时复制:当某个对象需要修改数据时,才创建该对象独有的副本
  3. 读时共享:只读操作不需要创建副本

5.2延迟拷贝(Copy-on-Write,COW)是一种巧妙结合了浅拷贝和深拷贝优势的技术,它在保持数据安全性的同时提高了性能。

感谢您的阅读和关注! (˶╹ꇴ╹˶)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值