我正在查看wxWidgets hello world和示例:http://www.wxwidgets.org/docs/tutorials/hello.htm和http://www.wxwidgets.org/docs/tutorials/hworld2.txt以及 http://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!") );
}
这些片段,教程,链接中没有一个使用删除! 怎么会这样?他们为什么不删除一件事?
他们有什么东西,我只是看不到吗?也许以某种方式压倒“新”并让它以某种方式自动删除?
诀窍是什么?
答案 0 :(得分:3)
wxWidgets获取您创建的大多数对象的所有权,并且文档中明确提到了少数例外。特别是,窗口由其父窗口拥有,菜单项由包含它们的菜单拥有,菜单本身由菜单栏拥有,并且大小调整器由它们所关联的窗口拥有。作为一种特殊情况,顶级窗口是“自有的”,即当相应的屏幕窗口关闭时它们将被销毁。
请注意,只要wxWidgets“知道”您的对象,所有这一切都有效。如果您创建一个菜单而不将其附加到菜单栏,则 负责删除它,否则您将收到内存泄漏。
答案 1 :(得分:2)
每次都会将对象传递给某个函数,这会消耗这些对象并随意处理它们。