在QT中,有一项隐含共享技术(也叫回写复制,copy on write),它结合了浅拷贝和深拷贝的特点,具有以下优点:
(1)、可以降低对内存和CPU资源的使用,提高程序的运行效率;
(2)、方便程序员做某些对象的赋值操作,而不必拷贝深拷贝和浅拷贝的问题;
隐含共享的工作原理,简单说就是:
当两个对象共享同一份数据时(通过浅拷贝实现数据块的共享),如果数据不改变,不进行数据的复制。而当某个对象需要改变数据时则执行深拷贝。
举例:
QString str1 = “Dog”;
QString str2 = str1;
这时,str1和str2两个对象指向内容中的同一块内部数据结构。
然后,修改str2:
str2[0] = "L";
这时,在修改str2之前,qt会做一次深拷贝,从而str1和str2指向不同的内存,然后再修改str2。
这时str2的值就是“Log”,而str1还是“Dog”。
如果这时:
str1 = str2。
那么,str1和str2将再次指向同一片内存,其值为“Log”,而“Dog”指向的内存将被释放。
qt的具体实现机制是通过在数据结构中保存一个引用计数的变量来实现的,有兴趣的同学可以进一步查阅资料了解。
在QT中,支持隐含共享的类有很多,比如:QDir、QByteArray、QBrush、QBitmap