gpt4 book ai didi

c++ - 为什么 wxWidgets 在调用 new 之后从不调用 delete?

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:48 25 4
gpt4 key购买 nike

我正在查看 wxWidgets hello world 和示例,来自:http://www.wxwidgets.org/docs/tutorials/hello.htmhttp://www.wxwidgets.org/docs/tutorials/hworld2.txthttp://zetcode.com/gui/wxwidgets/firstprograms/

和其他链接..

我注意到他们有:

bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50, 50), wxSize(450, 340) );
frame->Show(true);
SetTopWindow(frame);
return true;
}

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;

menuFile->Append( ID_About, _("&About...") );
menuFile->AppendSeparator();
menuFile->Append( ID_Quit, _("E&xit") );

wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, _("&File") );

SetMenuBar( menuBar );

CreateStatusBar();
SetStatusText( _("Welcome to wxWidgets!") );
}

这些片段、教程、链接中没有一个使用删除!怎么会这样?他们为什么不删除任何东西?

是否有他们正在做的事情是我看不到的?也许以某种方式覆盖"new"并让它以某种方式自动删除?

有什么诀窍?

最佳答案

wxWidgets 拥有您创建的大部分对象的所有权,文档中明确提到了少数异常(exception)情况。特别是,窗口由它们的父窗口拥有,菜单项由包含它们的菜单拥有,菜单本身由菜单栏拥有,而 sizer 由它们关联的窗口拥有。作为一种特殊情况,顶层窗口是“自有的”,即当相应的屏幕窗口关闭时,它们会被销毁。

请注意,只要 wxWidgets“知道”您的对象,所有这些都有效。如果您创建了一个菜单但没有将它附加到菜单栏,您负责删除它,否则会发生内存泄漏。

关于c++ - 为什么 wxWidgets 在调用 new 之后从不调用 delete?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com