为了最大化资源使用,和最小化数据拷贝,Qt在很多类中用到了隐式数据共享,以便数据仅在被写入时才被拷贝。该机制也被称为flyweight模式。 让我们以QByteArray为例,看看其是如何实现的。其内部使用一个名为Data的私有结构体来追踪共享的数据: 这里,如果数据保存在其他位置,则需要用到data来指向实际的数据位置;如果保存在自身,则是array指向的位置。当对象被拷贝时(比如通过赋值运算符),则仅仅拷贝指针,而不拷贝数据本身: 另一方面,如果共享的数据要被修改(比如通过resize()函数),则会自动拷贝之: 现在让我们来看看如何使用QSharedData和QSharedDataPointer来创建自己的共享数据对象。 相当简单,没错吧!好了,有兴趣的朋友可以用QExplicitlySharedDataPointer来创建显式的数据共享;)
Qt之美(三)隐式数据共享
原创xiesiyuana ©著作权
©著作权归作者所有:来自51CTO博客作者xiesiyuana的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:八皇后问题(回溯法)
下一篇:Qt之美(二)元对象
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Qt入门之概述
Qt6介绍、环境搭建、应用示例
Qt6 QtCreator C++ -
Qt之美(三):隐式共享
Qt之美(三):隐式共享
数据 共享数据 引用计数 赋值运算符 数据块 -
a32_scala 隐式转换 隐式函数 隐式参数 隐式类
scala 隐式转换 隐式函数 隐式参数 隐式类
scala ci 隐式转换