これらの2つのタイプのポインターの違いは何ですか?私が読む限り、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++の自動共有ポインターです。これは、恒常性の尊重など、通常の目的では通常のポインターとまったく同じように動作します。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つあります)。