再谈QVector与QByteArray——Qt的写时复制(copy on write)技术

本文深入探讨了Qt中的QVector和QByteArray如何利用写时复制技术实现高效内存管理。通过示例代码展示了QByteRef和QStringRef在处理隐式共享数据时的作用,强调了理解这一机制对于避免潜在问题的重要性。同时,文章指出QByteArray通过返回代理类QByteRef来判断读写操作,而QVector等容器因内部数据类型的不确定性未采用相同策略,提醒开发者在使用时需谨慎处理。
摘要由CSDN通过智能技术生成

我们在之前的博文QVector的内存分配策略 再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值简单聊了聊QVector内存分配和赋值方面的一点东西,今天接着从QVector展开谈谈Qt的写时复制技术。老实说,“隐式共享,引用计数,写时复制”也是老调重弹的话题了,不过也是QTL与STL最大的区别之一,这篇博文不详谈“写时复制”技术的细节,那个有不少文章介绍过了,我们扯点关于operator[]和QByteRef和QStringRef的犊子就好。


废话不多说,直接进主题,我们先从一段最普通的代码开始:

    QVector<int> v1;
    v1 << 1 << 2 << 3 << 4 << 5;
    QVector<int> v2(v1);      // 此时v2与v1共享数据(内存)
    v2[1] = 8;                          // 写动作产生,v2被分配新内存
    qDebug() << v1 << endl << v2;

利用"写时复制"技术,v1“复制”给v2时并没有立刻复制,v2只是指向v1的内存地址,只有当v2被修改时才真正为其分配新的内存。 这样可以避免一些不必要的内存浪费和构造析构开销。得益于Qt良好的封装,即使我们不知道这一切,依然享受着“写时复制”机制带给我们的好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值