You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QString能否在两个Qt容器间共享而无需执行深拷贝?

关于QString在Qt容器中的拷贝机制问题

代码示例

QSet<QString> set;
QList<QString> list;
QString str("hello");

set.insert(str);
list.append(str);

问题

该QString是被深拷贝至两个容器中,还是在三个变量间共享(即QString中仅存一份"hello"拷贝,引用计数为3)?

解答

是三个变量(str、set中的元素、list中的元素)共享同一份"hello"的底层数据,此时引用计数为3,不会触发深拷贝。

原因是Qt的QString采用了**隐式共享(写时复制,Copy-on-Write)**机制:

  • 执行set.insert(str)和list.append(str)时,只是复制了QString的对象外壳(包含指向底层数据的指针、引用计数等元数据),并没有复制实际的字符串内容。
  • 只有当其中任意一个QString对象被修改(比如调用str.append("world"))时,才会触发深拷贝,为该对象创建独立的底层数据副本,同时调整引用计数。

内容的提问来源于stack exchange,提问作者alkmaar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:48:03