zoukankan      html  css  js  c++  java
  • Qt 智能指针QPointer, QSharedDataPointer ,QSharedPointer,QWeakPointer和QScopedPointer

    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 }
  • 相关阅读:
    Linux系统中日志级别详情
    android测试和iOS测试的区别
    React Router的Route的使用
    React中this.props的主要属性
    2019 年 React 学习路线图(转)
    Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project
    Maven笔记
    优化Android Studio/Gradle构建(转)
    Java相关查询记录
    自己电脑组一个Wifi热点
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14918344.html
Copyright © 2011-2022 走看看