Я перепутал использование delete
и destroy
в моем случае, когда вы хотите удалить объект, например:
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
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();
}
Предыдущий код вызывает ошибку времени выполнения при выходе из программы, и причиной этого является удаление переменной-члена m_pTaskbar
:
// app.cpp
int myApp::OnExit() {
if (m_pTaskbar != NULL) {
delete m_pTaskbar; // <-- The problem here
m_pTaskbar = NULL;
}
return 0;
}
Но учтите, что я использовал this->Destroy()
в разных местах в CTaskBarIcon.cpp
кодах.
Какая разница между delete
и destroy
, и они делают то же самое?