pau*_*ons 13 c++ qt pointers qsharedpointer
这两种指针有什么区别?据我所知,QSharedPointer可以很好地处理情况,那么QSharedDataPointer需要什么?
从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() { }
Run Code Online (Sandbox Code Playgroud)
QSharedPointer类包含对共享指针的强引用QSharedPointer是C++中的自动共享指针.它的行为与普通指针完全相同,包括对constness的尊重.如果没有其他QSharedPointer对象引用它,QSharedPointer将在它超出范围时删除它所持有的指针.
> QSharedPointer<MyObject> obj =
> QSharedPointer<MyObject>(new MyObject);
Run Code Online (Sandbox Code Playgroud)
因此,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个).