【问题标题】:Why wxWidgets never calls delete after calling new?为什么 wxWidgets 在调用 new 后从不调用 delete?
【发布时间】:2014-01-20 19:48:03
【问题描述】:

我正在查看 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!") );
}

这些sn-ps,教程,链接都没有使用删除! 怎么会这样?他们为什么不删除一个东西?

他们在做什么我只是没看到?也许以某种方式覆盖“新”并以某种方式自动删除?

有什么诀窍?

【问题讨论】:

  • 他们显然将这些实例传递给其他函数(根据他们的名字,他们现在是负责相关对象的人。)事后删除它们会让其他函数不开心,说最少。

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


【解决方案1】:

对象每次都传递给某个函数,该函数消耗对象并随意处置它们。

【讨论】:

    【解决方案2】:

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

    请注意,只要 wxWidgets“了解”您的对象,所有这些都可以正常工作。如果您创建了一个菜单并且没有将其附加到菜单栏,那么您有负责将其删除,否则会导致内存泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 2011-04-18
      • 2012-01-05
      • 2014-12-12
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多