2010-11-24 12 views
7

ウィジェットはヒープ上に(newを使用して)割り当てられている必要があり、削除する必要はありません(自動的に行われます)。Qtウィジェットオブジェクトの作成と割り当て解除

  1. 誰かが理由を説明できますか?
  2. ウィジェットがその方法ではなくスタックに割り当てられている場合はどうなりますか?

重要なのかどうかはわかりませんが、作成しているすべてのウィジェットには親があります。

Thisは言う:

親が0の場合、新しいウィジェットが ウィンドウになります。 parentが別のウィジェットである場合、 このウィジェットは親ウィンドウの子ウィンドウ になります。新しいウィジェットは親が削除されたときに削除された です。

答えて

20

魔法はありません。簡単に言えば、QObjectはデストラクタ内の子を自動的に削除します。あなたのウィジェットが親を持っていて、あなたがその親を破壊する限り、子供について心配する必要はありません。ですから、それが何であるか疑問に思ったら、QObject * parentパラメータです。それはそうです。

また、ドキュメントから:

すべての子オブジェクトが削除されます。これらのオブジェクトのいずれかがスタックまたはグローバルにある場合は、遅かれ早かれプログラムがクラッシュします。

だから、スタックに割り当てられているオブジェクトに親を与えません。

+0

ありがとうございますが、どこにリンクがありますか?私は検索しようとしましたが、それを見つけることができませんでした。 –

+0

btw私は既にクラッシュを経験していますので、疑問です。 –

+2

QObjectのデストラクタのドキュメントを見てください:http://doc.trolltech.com/4.7/qobject.html#dtor.QObject –

3

これに関する文書はhereです。ヒープ上で最も頻繁に割り当てられる理由は、オブジェクトツリーのメンバの構築順序に起因する問題を避けるためです。あなたがルールに従う限り、スタックは大丈夫ですが、信頼できる代替手段があるときにはなぜ迷惑でしょうか?

引用文献@Etienneはhereです。

関連する問題