一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

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永远不能被复制或被赋值

下面代码使用QSharedPointer,QWeakPointer和QScopedPointer的示例:

复制代码
 1 int main(int argc, char *argv[])     
 2 {     
 3     QCoreApplication a(argc, argv);     
 4     //raw pointer     
 5     QString *p = new QString("hello");     
 6     //Implements non-reference-counted strong pointer     
 7     QScopedPointer<QString> pScopedPointer(new QString("Scoped"));     
 8     // Build error, can NOT be shared and reference-counted     
 9     //QScopedPointer<QString> pScopedPointerpScopedPointer2 = pScopedPointer;     
10     //Implements reference-counted strong sharing of pointers     
11     QSharedPointer<QString> pSmart(new QString("Smart"));     
12     QSharedPointer<QString> pSmart2;     
13     pSmart2 = QSharedPointer<QString>(new QString("smart 2"));     
14     QSharedPointer<QString> pSharedPoninter;     
15     // can be shared safely and reference-counted     
16     pSharedPoninter = pSmart;     
17     qDebug() << *(pSmart.data());     
18     qDebug() << *(pSmart2.data());     
19     qDebug() << *(pSharedPoninter.data());     
20     QTimer *timer = new QTimer();     
21     QWeakPointer<QTimer> pWeakPointer = timer;     
22     //Weak pointer's resources can be deleted from outside world     
23     delete timer;     
24     if (pWeakPointer.isNull())     
25     {     
26         qDebug() << "contained QObject has been deleted";     
27     }     
28 }
复制代码

 

posted on   一杯清酒邀明月  阅读(771)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2020-06-22 Qt 对话框窗体关闭时,如何自动销毁窗体类对象、清空内存
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示