1

全部:

我有一个关于 wxDialog Destry() 的问题:

假设我创建了一个继承自 wxDialog 的对话框,例如:

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

在 wxMyDialog 内部,有一些 wxwidgets 指针,例如 wxbutton*、wxBoxSizer* ....

我读了一些教程,其中大多数都没有提到指针内部发生了什么,所以我想知道,当我调用时dlg->Destroy(),所有这些指针都可以自动释放吗?有人能告诉我 Destroy() 背后发生了什么吗?

或者

如果没有,我怎样才能手动释放它们?

最好的,

4

1 回答 1

2

当您在对话框中创建小部件指针时,您将指针传递给父对话框。父级保留这些指针,并且当父级对话框被破坏时,会在这些指针上调用 delete。所以,你看,每个窗口都会清理自己的孩子。

底线:孩子是由他们的父母“拥有”的,您永远不必担心在他们之后收拾东西 - 父母会这样做。

几个特殊情况:

  1. 如果您将 NULL 作为父窗口传递给小部件创建者,这意味着小部件属于桌面窗口,而不是应用程序。您不应该对除顶级窗口之外的任何东西执行此操作!

  2. 您不会将父窗口指针传递给 sizer 的构造函数。相反,您将 sizer 指针传递给父窗口的 SetSizer 方法 - 这具有相同的效果,父窗口拥有 sizer 并在窗口被销毁时将其删除。

于 2013-04-24T16:25:07.547 回答