Qt智能指针使用指南 帮助篇

移动开发
Qt智能指针使用指南 帮助篇,为友们分享,字啊本文中,我们一起来了关于指针的知识。先来卡本文。

本篇文章介绍的是Qt智能指针使用指南 帮助篇,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永远不能被复制或被赋值!

下面代码使用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. }   

小结:关于Qt智能指针使用指南 帮助篇的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2010-01-27 14:18:41

Android智能指针

2010-02-02 15:01:59

C++成员函数指针

2024-02-01 12:09:17

Optional容器null

2024-02-28 09:03:20

Optional空指针Java

2022-09-29 09:07:08

DataGrip数据仓库数据库

2015-07-27 11:34:03

Linux内核指针

2021-09-09 17:05:36

C++智能指针语言

2012-12-26 12:41:14

Android开发WebView

2010-02-05 14:36:20

C++智能指针

2021-08-11 09:01:48

智能指针Box

2009-12-28 17:40:10

WPF TextBox

2011-07-21 14:57:34

jQuery Mobi

2010-09-06 14:24:28

ppp authent

2021-07-27 10:09:27

鸿蒙HarmonyOS应用

2023-11-17 11:48:08

智能指针C++

2010-12-17 10:07:59

2009-12-31 17:17:45

Silverlight

2021-01-12 15:19:23

Kubernetes

2010-06-03 17:27:36

Hadoop命令

2010-08-04 15:37:31

Flex图表
点赞
收藏

51CTO技术栈公众号