隐含共享是Qt对不希望修改的数据决不进行复制的保证
举例:
QString str1 = "hello Wolrd";
QString str2 = str1;
此时str1和str2共同指向内存中相同的内部数据结构。用一个引用计数来表示多少QString指向相同的数据结构,此时引用计数值为2.
str2[0] = 'H';
修改str2时,它首先将对数据进行深层复制,以确保str1和str2指向不同的数据结构,然后再将新的数值应用于它所复制的数据。str1的数据hello World的引用计数变为1,str的数据Hello World的引用计数也为1.表示数据并未被共享。
str2.truncate(5);
再次修改str2,由于str2数据的引用计数为1,将不会发生数据复制。引用计数仍为1。
str1 = str2;
此时,str2赋给str1,str1的数据引用降为0,意味着没有一个QString在使用hello World数据,这些数据将从内存中释放,两个QString都指向Hello,这时他的引用计数变为2。