C++写时拷贝技术

本文探讨了C++中的深拷贝与浅拷贝的优缺点,深拷贝确保每个对象拥有独立的内存空间,而浅拷贝则可能导致内存泄漏。写时拷贝技术结合两者优点,通过计数器实现只在需要时进行深拷贝,避免多次释放问题。文章还介绍了写时拷贝的工作原理及其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 深拷贝与浅拷贝概念和优缺点

浅拷贝:只拷贝指针地址。
通常默认拷贝构造函数与赋值运算符重载都是浅拷贝。
成员变量中没有指针的情况可以直接使用浅拷贝。
优点:共享一份内存,节省空间
缺点:在释放的时候可能会多次释放,造成内存泄漏

深拷贝:重现分配堆内存,拷贝指针指向内容。
例如:String类
优点:每个指针指向不同的地址,避免了多次的释放
缺点:重复数据较多,占用空间
在这里插入图片描述
在这里插入图片描述
写时拷贝技术就是结合了深拷贝和浅拷贝各自的优点,实现数据相同时只有一份内存,不会出现多次释放问题

2. 写时拷贝技术

写实拷贝一般是用来优化深拷贝,而深拷贝是用在成员变量中含有指针的情况。
写实拷贝技术的原理是把类成员变量增加了个计数变量,然后再把成员变量封装起来,当遇到拷贝构造和赋值运算符的时候做浅拷贝,然后计数加一,析构的时候计数减一,当计数为零的时候释放指针。

正常的深拷贝:

#include <iostream>
using namespace std;

class Integer{
   
   
    int* n;
public:
    Integer(int num):n(new int(num)){
   
   
        cout << __func__ << ":" << n << endl;
    }
    Integer(const Integer& integer):n(new int(*(integer.n))){
   
   
        cout << __func__ << ":" << n << endl;
    }
    Integer& operator=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值