隐式共享的QJsonArray对象,非const遍历会导致一次内存拷贝

0oD三一o0

文章最后更新时间:2023年09月18日

直接看一个例子,先初始化一个大的arr,然后将其赋值给arr2和arr3,此时我们观察对象的d指针所指向的内存。 arr2和arr指向的内存是一致的,arr3和obj["arr"]指向的内存是一致的,所以arr2和arr3都是隐式共享的对象。

对于隐式共享的对象如果要修改的时候会拷贝一份数据,所以对于非const遍历隐式共享的数组会造成一次拷贝,非隐式共享对象没有这个问题。

所以,对比const和非const遍历,arr都不会造成拷贝; arr2和arr3非const遍历时会造成内存拷贝,可以观察遍历前和遍历后的d指针。

对于不需要修改的数据我们应该尽可能的去使用const遍历。

示例代码

        qDebug() << "1";
        QJsonObject obj;
        QJsonArray arr;
        for (int i = 0; i < 100000; i++) {
            QJsonObject obj;
            obj["text"] = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
            arr.append(obj);
        }
        obj["arr"] = arr;
        QJsonArray arr2 = arr;
        QJsonArray arr3 = obj["arr"].toArray();
        qDebug() << "2";
        for (QJsonArray::const_iterator itor = arr.constBegin(); itor != arr.constEnd(); ++itor) {
            const QJsonObject &in = itor->toObject();
            QString vvv = getValue(in, "text").toString();
        }
        qDebug() << "3";
        for (QJsonArray::const_iterator itor = arr.begin(); itor != arr.end(); ++itor) {
            const QJsonObject &in = itor->toObject();
            QString vvv = getValue(in, "text").toString();
        }
        qDebug() << "4";


免责声明:本文来自泞途,不代表0oD三一o0的观点和立场,如有侵权请联系本平台处理。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (有 16 条评论,1773人围观)
网友昵称:游客
游客 V 游客 沙发
07-15 回复
观点鲜明,立场坚定,作者态度明确。**://cxaa.ccsylxz.com
网友昵称:游客
游客 V 游客 椅子
07-16 回复
经典!**://yoqmb.jrhtjxsb.com/07/4.html
网友昵称:游客
游客 V 游客 板凳
07-18 回复
不灌水就活不下去了啊!**://yunlong.viptor.cn
网友昵称:游客
游客 V 游客 凉席
07-18 回复
很有品味!**://h0dv.haonuodigital.com
网友昵称:游客
游客 V 游客 地板
07-19 回复
一口气看完了,我要下去回味回味了!**://pet7.blog.getti.cn
网友昵称:游客
游客 V 游客 6楼
07-19 回复
楼主发几张靓照啊!**://9zod.news.getti.cn
网友昵称:游客
游客 V 游客 7楼
07-21 回复
楼上的能详细介绍一下么?**://gxm25.zcjy4.cn
网友昵称:游客
游客 V 游客 8楼
07-21 回复
好无聊啊!**://wulian.viptor.cn
网友昵称:游客
游客 V 游客 9楼
07-21 回复
楼主最近很消极啊!**://p1znu.zuyuancm.com/20240715/3.html
网友昵称:游客
游客 V 游客 10楼
07-23 回复
楼主的帖子实在是写得太好了。文笔流畅,修辞得体!**://36qu.wsxjs.com
网友昵称:游客
游客 V 游客 11楼
前天 回复
楼上的很有激情啊!**://www.indaseg.com
网友昵称:游客
游客 V 游客 12楼
昨天 回复
一口气看完了,我要下去回味回味了!**://g1hrv.lyghhpg.com/9/3.html
网友昵称:游客
游客 V 游客 13楼
昨天 回复
楼主写的很经典!**://hwgowp.archiac.com
网友昵称:游客
游客 V 游客 14楼
今天 回复
精华帖的节奏啊!**://3ct.kaboomvpn.com
网友昵称:游客
游客 V 游客 15楼
今天 回复
强,我和我的小伙伴们都惊呆了!**://www.hxhbm.com/305925.html
取消
微信二维码
微信二维码
支付宝二维码