【问题标题】:Difference between QSharedPointer and QSharedDataPointer?QSharedPointer 和 QSharedDataPointer 的区别?
【发布时间】:2011-04-22 02:35:29
【问题描述】:

这两种类型的指针有什么区别?据我所知,QSharedPointer 可以很好地处理情况,那么 QSharedDataPointer 需要什么?

【问题讨论】:

    标签: c++ qt pointers qsharedpointer


    【解决方案1】:

    来自 Qt 文档 QSharedDataPointer

    QSharedDataPointer 类 表示一个指向隐式的指针 共享对象。 QSharedDataPointer 隐式地写你自己的 共享课程很容易。 QSharedDataPointer 实现 线程安全的引用计数, 确保添加 QSharedDataPointers 指向您的可重入者 类不会使它们不可重入。 许多 Qt 使用隐式共享 类结合速度和 指针的内存效率 易于使用的类。查看共享 课程页面了解更多信息。

    示例用法-

     #include <QSharedData>
     #include <QString>
    
     class EmployeeData : public QSharedData
     {
       public:
         EmployeeData() : id(-1) { }
         EmployeeData(const EmployeeData &other)
             : QSharedData(other), id(other.id), name(other.name) { }
         ~EmployeeData() { }
    

    对于QSharedPointer

    QSharedPointer 类拥有一个 对共享指针的强引用 QSharedPointer 是一个自动的, C++中的共享指针。它的行为 就像一个普通的指针 正常目的,包括尊重 恒常性。 QSharedPointer 将删除 它走时所持有的指针 超出范围,前提是没有其他 QSharedPointer 对象正在引用 它。

    >  QSharedPointer<MyObject> obj =
    >          QSharedPointer<MyObject>(new MyObject);
    

    因此,QSharedDataPointer 用于创建隐式共享类。而 QSharedPointer 是一个指向类的引用计数智能指针。


    编辑

    在阅读Memory management in Qt?时,我发现了这个链接http://blog.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/。对 Qt 的不同智能指针(当前 API 有 8 个)进行了非常出色的讨论。

    【讨论】:

    • 我想我错过了一点;据我所知,我们可以使用 QSharedDataPointer 实现 Employee 示例,已经使用 QSharedPointer。有什么收获?
    • QSharedDataPointer 用于在类的多个实例之间实现类数据的浅拷贝,即共享数据。参考文档显示了继承 QSharedDataPointer 的类。所以它是班级内部的。 QSharedPointer 是类的一个EXTERNAL,它实现了一个指向类的单个实例的引用计数指针。所以它允许多个指针指向同一个类实例。
    • QSharedDataPointer 是实现写时复制并在以非常量方式访问对象时分离/复制其对象的绝妙方法。它有模板参数需要从 QSharedData 继承的限制。
    猜你喜欢
    • 2014-04-13
    • 1970-01-01
    • 2013-12-04
    • 2012-09-19
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多