• 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

    道虽迩,不行不至;事虽小,不为不成。
  • 相关阅读:
    通过接口实现适用于SqlServer和MySql的SqlHelper
    javascript面向对象(二)
    闭包
    javascript面向对象(一)
    引用类型——function
    引用类型——数组
    引用类型
    javascript变量的作用域
    正则表达式语法
    FCKeditor插件 中文解释
  • 原文地址:https://www.cnblogs.com/rock-cc/p/9346980.html
Copyright © 2020-2023  润新知