基本概念

幾個 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 實際被修改時,物件將自身從記憶體塊中分離,複製它的內容並修改內容。