QTコーディングで動的に割り当てられたポインタは、特定のデストラクタを記述しないため、どのように破壊されますか?ダイナミックメモリQTでの割り当て解除
答えて
短い答えは:
のQObjectは、オブジェクトツリーで自分自身を整理します。他のオブジェクトを親として持つQObjectを作成すると、それは親のchildren()リストに追加され、親があるときに削除されます。
Qtには、フレームワーク内のオブジェクト階層と所有権についての良い文書があります。
- QObjectのツリー構造
- マネージドポインタクラス
そして二つは本当にない:あなたはそれがhere
Neox's answerに展開するには読むことができ、Qtはオブジェクト管理のための二つの方法があります明らかになる理由のために非常によく混合する。
QObjectは、「無料」または親を持つことができます。 QObjectが親セットを持つ場合(QObjectコンストラクターに別のQObjectへのポインターを提供するか、setParent()
を呼び出す)、親QObjectは子QObjectの所有者になり、子QObjectの所有者になったときにその子が破棄されるようにします。また、子/親の関係を調べるためのいくつかの方法があります。
動的に割り当てられたオブジェクトを管理する別の方法は、this paperが非常にうまく説明する管理されたポインタクラスです。しかし要約すると:
- 「をQScopedPointerクラスは、動的に割り当てられたオブジェクトへのポインタを格納し、そして破壊時に、それを削除します」と、あなたは明確かつ明白な所有権と寿命を持つオブジェクトを必要とするときので良いです。
- "QSharedPointerクラスは、共有ポインタへの強い参照を保持しています[そして、他のQSharedPointerオブジェクトがそれを参照していない限り、スコープから外れるときに保持しているポインタを削除します。明確なカットですが、失われずメモリリークにならないようにしたいと考えています。 QWeakPointerは、所有権を暗示することなくポインタを共有するために使用できます。
このように、保護されたポインタクラスのいくつかはQObjectツリーで使用できますが、そうする前にドキュメントを完全に読んで理解しているか、破損したデータ構造になっている可能性があります。
私のような初心者のための基礎をカバーするQTを学ぶための本をお勧めしますか?私はQT4本でC++ GUIプログラミングをしていますが、それは多くの助けを提供していません! – user1162272
本は必要ありません。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ドキュメントを検索することができます。 –
- 1. ダイナミックメモリ割り当て
- 2. C - ダイナミックメモリ割り当て
- 3. ダイナミックメモリ割り当てを使用した2D配列の理解
- 4. メモリの割り当て/割り当て解除(WindowsではC++)
- 5. Qtウィジェットオブジェクトの作成と割り当て解除
- 6. スタックメモリの割り当てと割り当て解除のメカニズム
- 7. リソースの割り当て/割り当て解除
- 8. UIViewController.viewのメモリ割り当て/割り当て解除
- 9. ダイナミックメモリ割り当てのないC++の戻り配列?
- 10. Javaメモリの割り当て解除
- 11. ゲームセンターのメモリ割り当て解除(Cocos2D)
- 12. C++ステートフルアロケータの割り当て解除
- 13. FORTRANでの割り当て解除とメモリ割り当ての問題
- 14. iPhone:インスタンス変数の再割り当て=割り当て解除ですか?
- 15. ポインタのベクトルから要素を消去し、以前にnew演算子で割り当てられたダイナミックメモリの割り当てを解除しますか?
- 16. PopoverController - 割り当て解除インスタンス
- 17. メモリ割り当て解除シミュレーション問題
- 18. オブジェクトの配列(オブジェクトのダイナミックメモリ割り当て)からオブジェクトを削除(メモリ解放)するには
- 19. 割り当て/割り当て解除を追跡できますか?
- 20. C++でメモリを割り当て、割り当てを解除します
- 21. ダイナミックメモリ割り当ての使用を記録する
- 22. dllの境界を越えたメモリ割り当てと割り当て解除
- 23. Swift UnsafeMutablePointer関数内のメモリ割り当てと割り当て解除
- 24. オーバーライトと割り当て/割り当て解除の効率 - 効率
- 25. ダイナミックメモリ割り当てにmallocとfreeを使用する方法
- 26. UINavigationControllerDelagateを正しく割り当て/割り当てを解除する
- 27. C++でのクラス間メモリの割り当て解除の処理
- 28. 変数の割り当て、解放、割り当て
- 29. ダイナミックメモリ割り当てを使用してCで行列を扱うには?
- 30. 構造体のフィールドをc(ダイナミックメモリ割り当て)で出力する
例を挙げることができますか? –