基本概念
几个 Qt 对象和容器使用概念 calles 隐式共享,也可以称为 copy-on-write 。
隐式共享意味着使用此概念的类在初始化时共享相同的数据。
使用这个概念的其中一个类是 QString。
QString s1("Hello World");
这是 QString 的简化模型。在内部它有一个内存块,带有实际的字符串数据和一个引用计数器。
QString s2 = s1;
如果我们现在复制这个 QString
,两个对象将在内部指向相同的内容,从而避免不必要的复制操作。请注意引用计数如何得到提升。因此,如果第一个字符串被删除,共享数据仍然知道它被另一个 QString
引用。
s2 += " and all the other Worlds!"
现在当 QString
实际被修改时,对象将自身从内存块中分离,复制它的内容并修改内容。