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();
}
相关推荐
天远云服20 分钟前
天远企业司法认证API对接实战:PHP构建B2B供应链合规防火墙
大数据·开发语言·后端·node.js·php
空空kkk26 分钟前
Java基础——代理
java·开发语言
赵谨言27 分钟前
基于YOLOv5的植物目标检测研究
大数据·开发语言·经验分享·python
野生技术架构师27 分钟前
互联网大厂必备 Java 面试八股文真题解析
java·开发语言·面试
不光头强33 分钟前
IO流知识点
开发语言·python
老约家的可汗33 分钟前
C++篇之类和对象下
java·开发语言·c++
水月wwww35 分钟前
Rust的安装与卸载 | windows
开发语言·windows·rust
SouthRosefinch44 分钟前
一、HTML简介与开发环境
开发语言·前端·html
€8111 小时前
Java入门级教程27——ActiveMQ的下载与应用
java·开发语言·activemq·点对点文本消息发送·点对点对象消息发送·mysql+redis·序列化对象消息传输
Irissgwe1 小时前
C&C++内存管理
c语言·开发语言·c++·c++内存管理