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();
}
相关推荐
_冷眸_4 分钟前
Python 调用大模型 API:最小请求、Base URL 和 401/404 排查
开发语言·人工智能·python
niucloud-admin15 分钟前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
熊猫钓鱼>_>41 分钟前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
Ai-_Man1 小时前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
raindayinrain1 小时前
c++设计模式
开发语言·c++·设计模式
hiahiahia1231 小时前
Streaming Model Output
开发语言·前端
熊猫钓鱼>_>2 小时前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
octopus_c2 小时前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
Eiceblue2 小时前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
j7~2 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象