基本概念
幾個 Qt 物件和容器使用概念 calles 隱式共享,也可以稱為 copy-on-write 。
隱式共享意味著使用此概念的類在初始化時共享相同的資料。
使用這個概念的其中一個類是 QString。
QString s1("Hello World");
這是 QString 的簡化模型。在內部它有一個記憶體塊,帶有實際的字串資料和一個引用計數器。
QString s2 = s1;
如果我們現在複製這個 QString
,兩個物件將在內部指向相同的內容,從而避免不必要的複製操作。請注意引用計數如何得到提升。因此,如果第一個字串被刪除,共享資料仍然知道它被另一個 QString
引用。
s2 += " and all the other Worlds!"
現在當 QString
實際被修改時,物件將自身從記憶體塊中分離,複製它的內容並修改內容。