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 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码4 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客5 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆6 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光6 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园6 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西7 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨7 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG8 小时前
Golang 基础05 结构体struct
开发语言·算法·golang