zoukankan      html  css  js  c++  java
  • 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

    道虽迩,不行不至;事虽小,不为不成。
  • 相关阅读:
    一本通1590恨 7 不成妻
    一本通1591数字计数
    一本通1589不要 62
    一本通1588数字游戏
    一本通1587【例 3】Windy 数
    一本通1586【 例 2】数字游戏
    一本通1585【例 1】Amount of Degrees
    一本通1584骑士
    一本通1583叶子的染色
    一本通1581旅游规划
  • 原文地址:https://www.cnblogs.com/rock-cc/p/9346980.html
Copyright © 2011-2022 走看看