Window系统下开发Qt(8)-- QString 写时拷贝

QString内部有共享机制。所谓共享机制,就是假若将QString类型的字符串str1赋值给str2,实际str2并没有拷贝str1的数据,只是将str2中一个指向实际数据的指针指向了str1。意味着str1和str2的存储数据的内存是同一块地址。这样就实现了共享,节省内存。

但是,这样带来了问题:假如后面改了str2的数据,那个str1的数据也会跟着改变,这并不是用户想要的结果。

Qt在此问题上采用写时复制机制。也就是,在修改str2的数据时,先申请一块内存,将str1和str2共享的数据拷贝到新的内存中,然后将str2指向新的内存地址,这样str1和str2就不再共享一块内存,修改str2的数据不会影响str1。这就是QString的写时复制。

写时复制(copy-on-write)需要写数据的时候,才进行复制。

一、原理分析

1、QStringData类

QStringData类是Qt的一个内部类,不对外使用。在QString的内部,使用QStringData存储数据。QStringData类是一个模板类QTypeArrayData<ushort>,QTypeArrayData是一个Array模板,也就会一个数组,里面每一个元素就是一个字符,因此每一个字符都是ushort型,大小为2字节,存放的是字符对应的unicode码。

qstringliteral.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值