QSharedPointer和QSharedDataPointer之间的区别?

时间:2010-10-06 22:59:31

标签: c++ qt pointers qsharedpointer

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

1 个答案:

答案 0 :(得分: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 ++中的共享指针。它表现得很好   就像一个普通的指针一样   正常目的,包括尊重   常量性。 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个)。