这两种类型的指针有什么区别?据我所知,QSharedPointer 可以很好地处理情况,那么 QSharedDataPointer 需要什么?
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 是 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 个)。