Qt中的隐式共享

QString存储了一串QChar,而QChar提供了一个16位的Unicode 4.0字符。在后台,QString使用隐式共享来减少内存使用和避免不必要的数据复制。

1 隐式共享

​ 又称为写时复制
​ 使用隐式共享类作为参数传递是既安全又有效的,因为只有一个指向该数据的指针被传递了,只有当函数向它写入时才会复制该数据。

一个共享类 = 指向一个共享数据块的指针 + 数据组

​ 共享数据块包含了一个引用计数。每当有新的对象引用了数据块,引用计数就会递增,而对象不再引用数据块就会递减。当引用计数为0 时,共享数据块就会被销毁。当处理共享对象时,有两种复制方法:深复制浅复制

深复制:复制一个对象;
浅复制:复制一个引用(仅仅是一个指向该共享数据块的指针)。

​ 当隐式共享类使用“=”操作符时就是使用浅复制。但是当一个对象被修改时,就必须进行一次深复制。
​ 共享的好处是程序不需要进行不必要的数据复制,这样可以减少数据复制、使用更少的内存,对象也可以很容易地被分配,或者作为参数被传递,或者从函数被返回。

​ Qt中隐式共享类:QByteArray、QCursor、QFont、QPixmap、QString、QUrl、QVariant、所有的容器类等

2 QByteArray

​ 提供一个字节数组,可以用来存储原始字节(包括‘\0’)和传统的以‘\0’结尾的8位字符串。

3 QVariant

​ QVariant类像是常见的Qt数据类型的一个共用体,一个QVariant对象在一个时间只保存一个单一类型的单一的值。可以使用toT()(T代表一种数据类型)函数将其转换位T类型,并且获取它的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值