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();
}
相关推荐
十五年专注C++开发16 分钟前
Oat++: 一个轻量级、高性能、零依赖的 C++ Web 框架
开发语言·c++·web服务·oatpp
陈天伟教授17 分钟前
心电心音同步分析-案例:原型设计一
开发语言·人工智能·python·语言模型·架构
Allen_LVyingbo20 分钟前
量子计算Dirac Notation基本教学—从零基础到读懂量子信息论文(下)
开发语言·人工智能·python·数学建模·量子计算
wjs202428 分钟前
Ruby File 类和方法
开发语言
xyq202431 分钟前
API 类别 - UI 核心
开发语言
米优38 分钟前
qt+vlc实现国标客户端测试工具
qt·gb28181·vlc
Dxy123931021644 分钟前
Python路径算法简介
开发语言·python·算法
文慧的科技江湖1 小时前
光储充协同的终极闭环:用SpringCloud微服务打造“发-储-充-用“智能能源网络 - 慧知开源充电桩管理平台
java·开发语言·spring cloud·微服务·能源·充电桩开源平台·慧知重卡开源充电桩平台
東雪木1 小时前
Java学习——内部类(成员内部类、静态内部类、局部内部类、匿名内部类)的用法与底层实现
java·开发语言·学习·java面试
昵称暂无11 小时前
通过 C# 复制 Word 文档、指定段落、指定节
开发语言·c#·word