1

All:

I got one question about the the wxDialog Destry():

Suppose I make a dialog which inheritate from wxDialog like:

 wxMyDialog dlg = new wxMyDialog(.....the pararmeter.....)

and inside wxMyDialog, there are some wxwidgets pointers like wxbutton*, wxBoxSizer* ....

I read some tutorials, most of them do not mention what happen to those inside pointers, so I wonder, when I call dlg->Destroy(), can all those pointers be automatically free? Can someone tell me what happen behind Destroy()?

or

if not, how can I free them mannually?

Best,

4

1 に答える 1

2

ダイアログ内にウィジェット ポインターを作成するときは、ポインターを親ダイアログに渡します。親はこれらのポインターを保持し、親ダイアログが破棄されると、これらのポインターに対して delete が呼び出されます。つまり、すべてのウィンドウがその子をクリーンアップします。

結論: 子供は親によって「所有」されており、子供の後片付けについて心配する必要はありません。親が片付けます。

いくつかの特殊なケース:

  1. 親ウィンドウとして NULL をウィジェット クリエータに渡す場合、これはウィジェットがアプリケーションではなくデスクトップ ウィンドウに属していることを意味します。トップレベルウィンドウ以外ではこれを行うべきではありません!

  2. 親ウィンドウ ポインターをサイザーのコンストラクターに渡さないでください。代わりに、サイザー ポインターを親ウィンドウの SetSizer メソッドに渡します。これは同じ効果があり、親ウィンドウはサイザーを所有し、ウィンドウが破棄されると削除します。

于 2013-04-24T16:25:07.547 に答える