01Qt中的隐式共享

隐式共享

​ 隐式共享又称为回写复制(copy on write)。当两个对象共享同一分数据时(通过浅拷贝实现数据共享),如果数据不改变,则不进行数据的复制。而当某个对象需要需要改变数据时,则进行深拷贝。

​ 程序在处理共享对象时,使用深拷贝和浅拷贝这两种方式复制对象。所谓深拷贝,就是生成对象的一个完整复制品;而浅拷贝则是一个引用复制(如今复制指向共享数据的指针)。显然,执行一个深拷贝的代价是昂贵的,要占用更多的内存和 CPU 资源;而浅拷贝的效率则很好,他仅需设置一个指向共享数据库的指针几修改引用计数的值。

​ 隐式共享可以降低对内存和 CPU 资源的使用,提高程序的运行效率。它使得在函数中(如参数、返回值)使用值传递更有效率。

​ QString 类采用隐式共享计数,将深拷贝和浅拷贝有机的结合起来。

#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString str1 = "data";
    QString str2 = str1;
    //QString的data_ptr()函数返回字符存储区地址
    qDebug() << "浅拷贝:" ;
    qDebug() << "str1.data_ptr(): " << str1.data_ptr();
    qDebug() << "str2.data_ptr(): " << str2.data_ptr();

    str2[3] = 'e';
    str2[0] = 'f';
    qDebug() << "深拷贝:" ;
    qDebug() << "str1.data_ptr(): " << str1.data_ptr();
    qDebug() << "str2.data_ptr(): " << str2.data_ptr();

    return a.exec();
}

​ 输出结果为:

image

道虽迩,不行不至;事虽小,不为不成。
原文地址:https://www.cnblogs.com/rock-cc/p/9346980.html