博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt智能指针使用学习
阅读量:6096 次
发布时间:2019-06-20

本文共 1825 字,大约阅读时间需要 6 分钟。

hot3.png

Qt提供了很多智能指针的类,比较常见的有QPointer, QSharedDataPointer ,QSharedPointer,QWeakPointer和QScopedPointer等等,它们被引入的Qt版本即描述如下:

QPointer (4.0) 已经过时,可以被QWeakPointer所替代,它不是线程安全的。

QSharedDataPointer (4.0) -- 提供对数据的COPY-ON-WRITE以及浅拷贝,提供对数据(而不是指向数据的指针)的线程安全的保护。(注:提供对数据的线程安全保护要结合QsharedData来完成),它是线程安全的。

QSharedPointer (4.5)-- 实现了引用计数的可共享资源的强类型指针,它是线程安全的。

QWeakPointer (4.5)-- 实现了引用计数的可共享资源的弱类型指针,它是线程安全的。

QScopedPointer (4.6)-- 实现了非引用计数的独享资源的强类型指针,它是线程安全的。

strong pointer :在有它所指向的资源的所有权期间,永远不会放弃这个所有权。

weak pointer:在有它所指向的资源的所有权期间,允许外界释放其资源从而使其放弃这个所有权。

QSharedPointer有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权而auto_ptr可以。事实上,scoped_ptr永远不能被复制或被赋值!

int main(int argc, char *argv[])     {         QCoreApplication a(argc, argv);         //raw pointer         QString *p = new QString("hello");         //Implements non-reference-counted strong pointer         QScopedPointer
pScopedPointer(new QString("Scoped")); // Build error, can NOT be shared and reference-counted //QScopedPointer
pScopedPointerpScopedPointer2 = pScopedPointer; //Implements reference-counted strong sharing of pointers QSharedPointer
pSmart(new QString("Smart")); QSharedPointer
pSmart2; pSmart2 = QSharedPointer
(new QString("smart 2")); QSharedPointer
pSharedPoninter; // can be shared safely and reference-counted pSharedPoninter = pSmart; qDebug() << *(pSmart.data()); qDebug() << *(pSmart2.data()); qDebug() << *(pSharedPoninter.data()); QTimer *timer = new QTimer(); QWeakPointer
pWeakPointer = timer; //Weak pointer's resources can be deleted from outside world delete timer; if (pWeakPointer.isNull()) { qDebug() << "contained QObject has been deleted"; } }

转载于:https://my.oschina.net/shelllife/blog/50810

你可能感兴趣的文章
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
Check failed: error == cudaSuccess (7 vs. 0) too many resources requested for launch
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>