qt QString隐式共享机制

隐式共享机制能最大化资源的利用和最小化的数据块复制拷贝.

当我们要操作相同的数据块时("例如:数据块hello"),我们只需要把变量的指针指向该数据块,而无需给该变量重新分配内存,只修改指向该数据块时统计引用计数+1;当增加新的变量指向该数据块时还是+1,这样2个变量就能同时共享同一个数据块"hello",这样就不用再分配一块内存.当其中一个变量取消对该数据块"hello"的引用计数去指向另外一个数据块(数据块"hi"),对数据块"hello"的引用计数就相应的-1,对数据块"hi"的引用就+1.

这样做的好处就是:

1.

当指向多个数据块相同时,若再分配相同的数据块"hello",就会造成资源浪费,同时通过使变量指向同一个数据块的方式,节省了分配内存消耗的时间使的运行时间更快.(此时执行浅拷贝)

2.

当指向多个数据块不相同时,就需要重新分配内存放置数据块(例如:数据块"hi"),(此时执行深拷贝.)在数据块相同时与不同时切换操作方式,更灵活轻便,减少内存开销和CPU资源消耗.

如下图:变量s0,s1同时指向数据块"hello",则该数据块的引用计数为2;当变量s0指向了数据块"hi"后,数据块"hello"引用计数为2-1=1,因指向了数据块"hi",则数据块"hi"的引用计数增加为1.

qt QString隐式共享机制_第1张图片

    /*隐式共享:
     * 当数据一样时仅做浅拷贝对数据块的引用计数进行操作,
     * 数据改变时对方执行深拷贝,充分减低内存及CPU资源的使用率
    */
    QString s0 = "hello";   //数据块"hello"引用计数1
    QString s1 = s0;        //数据块"hello"引用计数2
    QString s2 = s0;        //数据块"hello"引用计数3


    s2 = "Hi";          //数据块"hello"引用计数-1=2
                        //数据块"Hi"引用计数为1

    QString s3 = s0;    //数据块"hello"引用计数+1=3
    QString s4 = s2;    //数据块"Hi"引用计数+1=2
    QString s5 = s2;    //数据块"Hi"引用计数+1=3

 今天絮絮叨叨就到这了~~

你可能感兴趣的:(qt,qt,c++)