В этом случае наиболее удобно разрешить самоуничтожению для очистки.
Часто считается нехорошим сделать «неявное» освобождение памяти внутри класса, а не тем, что он его создал, но я обычно делаю исключения для немодальных диалоговых окон.
То есть;
Телефонный код:
#include "MyDialog.h"
void CMyApp::OpenDialog()
{
CMyDialog* pDlg = new CMyDialog(this);
if (pDlg->Create(IDD_MYDIALOG, this))
pDlg->ShowWindow(SW_SHOWNORMAL);
else
delete pDlg;
}
Диалоговый код:
void CMapBasicDlg::OnDestroy()
{
CDialog::OnDestroy();
delete this; // Shown as non-modal, we'll clean up ourselves
}