【问题标题】:How the wxDialog Destroy function workwxDialog Destroy 函数是如何工作的
【发布时间】:2013-04-24 16:22:23
【问题描述】:

全部:

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

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

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

在wxMyDialog里面,有一些wxwidgets指针,比如wxbutton*, wxBoxSizer* ....

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

如果没有,我该如何手动释放它们?

最好的,

【问题讨论】:

    标签: wxwidgets


    【解决方案1】:

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

    底线:孩子归他们的父母“所有”,您无需担心收拾他们 - 父母会这样做。

    几个特殊情况:

    1. 如果将 NULL 作为父窗口传递给小部件创建者,这意味着小部件属于桌面窗口,而不是应用程序。除了顶级窗口之外,您不应该这样做!

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

    【讨论】:

    • 谢谢,但我想知道像 wxBoxSizer 这样的小部件发生了什么?我读过很多教程,他们也没有给出父母指针参数,但仍然有效?
    • 当您在父窗口上调用 setSizer 时,父窗口将拥有 sizer,它会按照文档中的说明自动删除它。 docs.wxwidgets.org/2.8/wx_wxwindow.html#wxwindowsetsizer
    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2021-03-30
    • 2020-07-18
    相关资源
    最近更新 更多