我正在尝试理解应该如何设计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。”所以我认为我自己的额外属性仍然可供我使用。
情况不是这样吗?
答案 0 :(得分:4)
问题在于您创建的本地变量恰好与您在班级中使用的名称相匹配。
// Create Logger Class
cLogStore * cl_LogStore = new cLogStore( );
cl_LogStore
此处与成员变量cl_LogStore
不同。这是一个局部变量。因此,您不仅在无效指针值上调用delete
,而且还有内存泄漏。