2009-09-26 21 views
18

これは書かれているようですhere Qtは今まで8つのスマートポインタクラスを特化しています。 あなたが必要とするのはそれだけです。 しかし、これらのスマートポインタのいずれかを使用するには、あなたのクラスを常にQObjectから派生させる必要があります。 Qtに任意のクラスで動作するスマートポインタの他の実装はありますか?Qtのスマートポインタ

+8

実際、これらのポインタのほとんどは、QObjectから派生する必要はありません。クラスの中には、クラスが扱う必要があるものや、他のいくつかのQクラスから派生するものがあります。 AFAIKでは、QPointerだけがあなたのクラスをQObjectから派生させる必要があります。つまり、あなたのプロジェクトではQtを使用する必要があります。 –

答えて

18

多くのQtクラスはQObjectから派生し、組み込みのスマートポインタクラスのいくつかはQObject(またはQSharedData)に関連していますが、QSharedPointerQScopedPointerテンプレートはポインタに何かを許可するようです。その向こう

、あなたはBoostでいくつかのsmart pointer templates見つけることができます:

  • scoped_ptr - 単一のオブジェクトの簡単な唯一の所有権を。コピー不可能。
  • scoped_array - 配列の単純な所有権。コピー不可能。
  • shared_ptr - 複数のポインタ間でオブジェクトの所有権が共有されています。
  • shared_array - 複数のポインタ間で配列の所有権が共有されています。
  • weak_ptr - shared_ptrが所有するオブジェクトを所有していないオブザーバー。
  • intrusive_ptr - 参照カウントが埋め込まれたオブジェクトの共有所有権。
+0

これは正しいです。 STLにもauto_ptrがあります。質問はQTに関するものです。 – alexkr

+1

Qtの実質的にQObjectをベースにしているので、それ以外のものが必要な場合は、1つの場所を探してみましょう:) –

+8

うわー、私はまだC++のような "Cクラス"(1990年頃のC++)を使います。それがうまくいけば、この醜い読めないスマートなポインターの気持ちが私を病気にする。 – Lothar