字符串类QString

1.浅拷贝:

   浅拷贝就比如像引用类型

   浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。举个例子,一个人一开始叫张三,后来改名叫李四了,可是还是同一个人,不管是张三缺胳膊少腿还是李四缺胳膊少腿,都是这个人倒霉。

 

2.深拷贝:

   而深拷贝就比如值类型。

  深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一个人,叫李四,不管是张三缺胳膊少腿还是李四缺胳膊少腿都不会影响另外一个人。比较典型的就是Value(值)对象,如预定义类型Int32Double,以及结构(struct),枚举(Enum)等。

3.隐式共享:

  隐式共享又叫做回写复制。当两个对象共享同一份数据时(通过浅拷贝实现数据块的共享),如果数据不改变,不进行数据的复制。而当某个对象需要改变数据时则执行深拷贝。

  QString类采用隐式共享技术,将深拷贝和浅拷贝有机地结合起来。

  例如:

QString str1="data";
QString str2=str;  //浅拷贝指向同一个数据块
str2[3]='e';       //一次深拷贝,str2对象指向一个新的、不同于str1所指向的数据结构
str2[0]='f';       //不会引起任何形式的拷贝,因为str2指向的数据结构没有被共享
str1=str2;         //str1指向的数据结构将会从内存释放掉,str1对象指向str2所指向的数据结构

 

 

 

posted @ 2013-01-05 14:56  wiessharling  阅读(2097)  评论(0编辑  收藏  举报