Qt隐式共享产生的问题

Qt的容器在赋值时会产生隐式共享(赋值拷贝时并未产生实际的数据拷贝,仅仅是数据相关的指针的赋值),拷贝后直到修改值时,才会产生实际的拷贝,共享数据的容器会有一个计数器

cpp 复制代码
int main(int argc, char* argv[])
{
    QCoreApplication a(argc, argv);

    QVector<int> listA;
    for (int i = 0; i < 10000; i++) {
        listA.push_back(i);
    }
    int& eleRef = listA[0];

    {
        QVector<int> listB = listA; // 产生隐式共享,listA和listB都共享一个实际数据的内存,并未产生深拷贝
        listA[0] = 100; // 修改listA,产生写时复制,listA重新申请内存,将和listB共享的数据拷贝过来
    }
    
    // 此时listAEleRef所引用的数据仅存放在listB中了,但listB已经析构
    std::cout << eleRef << std::endl; // 此处打印的值将不会是100(现象为随机数或者产生崩溃)

    a.exec();
}
相关推荐
9稳2 小时前
基于单片机的家庭安全系统设计
开发语言·网络·数据库·单片机·嵌入式硬件
JQLvopkk2 小时前
C#调用Unity实现设备仿真开发浅述
开发语言·unity·c#
每天吃饭的羊2 小时前
hash结构
开发语言·前端·javascript
一路往蓝-Anbo2 小时前
第37期:启动流程(二):C Runtime (CRT) 初始化与重定位
c语言·开发语言·网络·stm32·单片机·嵌入式硬件
Jackson@ML2 小时前
2026最新版Python 3.14.2安装使用指南
开发语言·python
橘子师兄2 小时前
C++AI大模型接入SDK—ChatSDK使用手册
开发语言·c++·人工智能
txinyu的博客2 小时前
STL string 源码深度解析
开发语言·c++
Channing Lewis2 小时前
正则灾难性回溯(catastrophic backtracking)
开发语言·python
CS创新实验室2 小时前
《计算机网络》深入学:轮询和令牌传递协议
开发语言·计算机网络·考研·php·408