У меня есть CTaskBarIcon *m_pTaskbar
переменная-член в классе myApp.
Эта переменная будет иметь экземпляр объекта CTaskBarIcon
.
При удалении m_pTaskbar
из метода onExit
возникает ошибка времени выполнения при выходе из программы, и причиной проблемы является удаление переменной m_pTaskbar
.
app.h
#include "taskBarIcon.h"
class myApp: public wxApp{
public:
// ....
private:
CTaskBarIcon *m_pTaskbar; // = NULL
};
app.cpp
int myApp::OnExit() {
if (m_pTaskbar != NULL) {
delete m_pTaskbar; // <-- The problem here
m_pTaskbar = NULL;
}
return 0;
}
int myApp::OnRun() {
mainFrm *_mainFrm = mainFrm::getInstance(); // The main window
_mainFrm->Show(false);
m_pTaskbar = new CTaskBarIcon(_mainFrm);
m_pTaskbar->SetIcon(wxIcon("appIcon"), _mainFrm->GetTitle());
return wxApp::OnRun();
}
CTaskBarIcon.cpp
CTaskBarIcon::CTaskBarIcon(mainFrm *handler) : m_pHandler(handler), m_pMenu(NULL) {
this->Bind(wxEVT_TASKBAR_CLICK, &CTaskBarIcon::rightButton_Click, this);
}
CTaskBarIcon::~CTaskBarIcon() {
if (m_pMenu != NULL) {
delete m_pMenu;
m_pMenu = NULL;
}
}
void CTaskBarIcon::rightButton_Click(wxTaskBarIconEvent & event) {
PopupMenu(CreatePopupMenu());
}
void CTaskBarIcon::popupMenu_showWindow(wxCommandEvent & event) {
m_pHandler->Iconize(false); // 'm_pHandler' is the main window
m_pHandler->Show();
m_pHandler->Raise();
this->Destroy();
}
void CTaskBarIcon::popupMenu_showAbout(wxCommandEvent & event) {
aboutFrm aboutWindow(m_pHandler, "About");
aboutWindow.ShowModal();
aboutWindow.Raise();
}
void CTaskBarIcon::popupMenu_exit(wxCommandEvent & event) {
m_pHandler->Close(true);
this->Destroy();
}
wxMenu* CTaskBarIcon::CreatePopupMenu() {
this->m_pMenu = new wxMenu();
m_pMenu->Append(wxID_SHOW, "&Show");
m_pMenu->Append(wxID_ABOUT, "&About");
m_pMenu->Append(wxID_EXIT, "E&xit");
m_pMenu->Bind(wxEVT_MENU, &CTaskBarIcon::popupMenu_showWindow, this, wxID_SHOW);
m_pMenu->Bind(wxEVT_MENU, &CTaskBarIcon::popupMenu_showAbout, this, wxID_ABOUT);
m_pMenu->Bind(wxEVT_MENU, &CTaskBarIcon::popupMenu_exit, this, wxID_EXIT);
return this->m_pMenu;
}
Есть ли проблема с моим кодом?