2012-02-03 10 views

答えて

3

短い答えは:

のQObjectは、オブジェクトツリーで自分自身を整理します。他のオブジェクトを親として持つQObjectを作成すると、それは親のchildren()リストに追加され、親があるときに削除されます。

Qtには、フレームワーク内のオブジェクト階層と所有権についての良い文書があります。

  1. QObjectのツリー構造
  2. マネージドポインタクラス

そして二つは本当にない:あなたはそれがhere

8

Neox's answerに展開するには読むことができ、Qtはオブジェクト管理のための二つの方法があります明らかになる理由のために非常によく混合する。

QObjectは、「無料」または親を持つことができます。 QObjectが親セットを持つ場合(QObjectコンストラクターに別のQObjectへのポインターを提供するか、setParent()を呼び出す)、親QObjectは子QObjectの所有者になり、子QObjectの所有者になったときにその子が破棄されるようにします。また、子/親の関係を調べるためのいくつかの方法があります。

動的に割り当てられたオブジェクトを管理する別の方法は、this paperが非常にうまく説明する管理されたポインタクラスです。しかし要約すると:

  • 「をQScopedPointerクラスは、動的に割り当てられたオブジェクトへのポインタを格納し、そして破壊時に、それを削除します」と、あなたは明確かつ明白な所有権と寿命を持つオブジェクトを必要とするときので良いです。
  • "QSharedPointerクラスは、共有ポインタへの強い参照を保持しています[そして、他のQSharedPointerオブジェクトがそれを参照していない限り、スコープから外れるときに保持しているポインタを削除します。明確なカットですが、失われずメモリリークにならないようにしたいと考えています。 QWeakPointerは、所有権を暗示することなくポインタを共有するために使用できます。

このように、保護されたポインタクラスのいくつかはQObjectツリーで使用できますが、そうする前にドキュメントを完全に読んで理解しているか、破損したデータ構造になっている可能性があります。

+0

私のような初心者のための基礎をカバーするQTを学ぶための本をお勧めしますか?私はQT4本でC++ GUIプログラミングをしていますが、それは多くの助けを提供していません! – user1162272

+0

本は必要ありません。Qtのドキュメントをご利用ください!まず[チュートリアル](http://developer.qt.nokia.com/doc/qt-4.8/tutorials.html)のいくつかをご覧ください。 [クラス参照](http://developer.qt.nokia.com/doc/qt-4.8/classes.html)を手元に置いて、理解していないことを探します。私はCTRL + Kを押して "?"を入力するだけでQt Creatorを使うことをお勧めします。 Qt Creator内のQtドキュメントを検索することができます。 –

関連する問題