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

来源:互联网 发布:flux软件怎么恢复 编辑:程序博客网 时间:2024/05/29 11:51
 

本篇文章介绍的是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智能指针使用指南 帮助篇的内容介绍完了,希望本文对你有所帮助!

原创粉丝点击