为什么wxWidgets在调用new后从不调用delete?

时间:2014-01-03 07:19:52

标签: c++ memory-management c++11 wxwidgets

我正在查看wxWidgets hello world和示例:http://www.wxwidgets.org/docs/tutorials/hello.htmhttp://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!") );
}

这些片段,教程,链接中没有一个使用删除! 怎么会这样?他们为什么不删除一件事?

他们有什么东西,我只是看不到吗?也许以某种方式压倒“新”并让它以某种方式自动删除?

诀窍是什么?

2 个答案:

答案 0 :(得分:3)

wxWidgets获取您创建的大多数对象的所有权,并且文档中明确提到了少数例外。特别是,窗口由其父窗口拥有,菜单项由包含它们的菜单拥有,菜单本身由菜单栏拥有,并且大小调整器由它们所关联的窗口拥有。作为一种特殊情况,顶级窗口是“自有的”,即当相应的屏幕窗口关闭时它们将被销毁。

请注意,只要wxWidgets“知道”您的对象,所有这一切都有效。如果您创建一个菜单而不将其附加到菜单栏,则 负责删除它,否则您将收到内存泄漏。

答案 1 :(得分:2)

每次都会将对象传递给某个函数,这会消耗这些对象并随意处理它们。