基本概念

几个 Qt 对象和容器使用概念 calles 隐式共享,也可以称为 copy-on-write

隐式共享意味着使用此概念的类在初始化时共享相同的数据。

使用这个概念的其中一个类是 QString。

QString s1("Hello World");

StackOverflow 文档

这是 QString 的简化模型。在内部它有一个内存块,带有实际的字符串数据和一个引用计数器。

QString s2 = s1;

StackOverflow 文档

如果我们现在复制这个 QString,两个对象将在内部指向相同的内容,从而避免不必要的复制操作。请注意引用计数如何得到提升。因此,如果第一个字符串被删除,共享数据仍然知道它被另一个 QString 引用。

s2 += " and all the other Worlds!"

StackOverflow 文档

现在当 QString 实际被修改时,对象将自身从内存块中分离,复制它的内容并修改内容。