我试图了解应该如何设计 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();
}
但是,指针似乎不再有效,因此我无法使用它来删除分配的内存。
手册上说“OnExit 在销毁所有应用程序窗口和控件之后、wxWidgets 清理之前被调用。”所以我认为我自己的附加属性仍然可供我使用。
难道不是这样吗?
最佳答案
问题是您正在创建一个局部变量,该变量恰好与您在类中使用的名称相匹配。
// Create Logger Class
cLogStore * cl_LogStore = new cLogStore( );
这里的cl_LogStore
和成员变量cl_LogStore
不一样。它是一个局部变量。因此,您不仅对无效的指针值调用了delete
,而且还发生了内存泄漏。
关于c++ - 无法从 OnExit() 删除在 WxApp 中创建的动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24446804/