14

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

4

1 回答 1

6

来自 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++ 中的自动共享指针。它的行为与正常用途的普通指针完全一样,包括尊重 constness。如果没有其他 QSharedPointer 对象引用它,QSharedPointer 将在超出范围时删除它所持有的指针。

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

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


编辑

在 Qt 中阅读内存管理时?,我找到了这个链接http://blog.qt.io/blog/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/。对 Qt 具有的不同智能指针的非常好的讨论(当前 API 有 8 个)。

于 2010-10-07T00:19:34.097 回答