Qt : 隐式数据共享(copy on write)
copy on write 意思当内容有变动的时候,才对容器中的数据结构进行复制。否则仅作共享。
说到拷贝不得不说的两种类型:深拷贝与浅拷贝,深拷贝需要拷贝一个类中所有的数据成员,并分配相应的内存,即构造一个新对象。对于cpu和内存都是昂贵的。浅拷贝则只拷贝了相应的对象的指针。隐式共享实质是基于浅拷贝与引用计数而产生的。
具有隐式数据共享的类包含一个共享数据块指针。这个数据块包含了数据本身及数据的引用计数。当共享对象被创建时,引用计数被置为1,当其发生copy操作时,引用计数加1。当对象不再引用时引用计数减1。当引用计数为0时,共享数据被删除。
隐式数据共享的好处,程序不需要不必要的重复数据,减少数据拷贝的需求。重复数据的代价是降低内存使用率。通过数据共享,对象可以简单地作为值来传递以及从函数中返回。
隐式数据共享是在底层完成的,程序人员无需关心。我们可以使用QSharedData 和QSharedDataPointer类实现自己的隐式数据共享类。