我试图了解应如何设计WxWidgets(3.0.1)应用程序,但由于我尝试的内容不起作用,我缺少了一些东西。
在基本级别上,我有WxApp,它创建一个WxFrame,将其显示出来,并且一切正常。
然后,我决定添加一个记录器对象。
我将该对象作为WxApp的成员:
class IniLogWx : public wxApp
{
public:
virtual bool OnInit( );
virtual int OnExit( );
private:
cLogStore * cl_LogStore;
};
并在WxApp::OnInit()中初始化它
bool IniLogWx::OnInit( )
{
MainFrame * frame = new MainFrame(_("Log Demo"), wxPoint(250, 250), wxSize(450, 340));
frame->Show(true);
SetTopWindow(frame);
// Create Logger Class
cLogStore * cl_LogStore = new cLogStore( );
return true;
}
当应用程序关闭(关闭MainFrame)时,WxApp::OnExit()触发,我认为我可以在这里清理内存
int IniLogWx::OnExit( )
{
delete cl_LogStore; // Unhandled Exception here due to invalid pointer
return wxApp::OnExit();
}
但是,指针似乎不再有效,因此无法使用它删除分配的内存。
该手册说:“在销毁所有应用程序窗口和控件之后,但在清理wxWidgets之前调用OnExit。”因此我认为自己仍然可以使用自己的其他属性。
不是这样吗?
最佳答案
问题是您正在创建一个与您在类(class)中使用的名称相匹配的局部变量。
// Create Logger Class
cLogStore * cl_LogStore = new cLogStore( );
此处的
cl_LogStore
与成员变量cl_LogStore
不同。它是一个局部变量。因此,不仅在无效的指针值上调用了delete
,而且还会发生内存泄漏。关于c++ - 无法从OnExit()中删除在WxApp中创建的动态对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24446804/