Yes, it is memory leak in your case but you can avoid memory leak in cases where modeless dialog allocated on the heap by making use of overriding PostNcDestroy
.
Dialogs are not designed for auto-cleanup ( where as Main frame windows, View windows are).
In case you want to provide the auto-cleanup for dialogs then you must override the PostNcDestroy
member function in your derived class. To add auto-cleanup to your class, call your base class and then do a delete this
. To remove auto-cleanup from your class, call CWnd::PostNcDestroy
directly instead of the PostNcDestroy
member in your direct base class.
void MyDialog::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;
}
How this works (from MSDN):
When destroying a Windows window, the
last Windows message sent to the
window is WM_NCDESTROY. The default
CWnd handler for that message
(CWnd::OnNcDestroy) will detach the
HWND from the C++ object and call the
virtual function PostNcDestroy. Some
classes override this function to
delete the C++ object.
"delete this" will free any C++
memory associated with the C++ object.
Even though the default CWnd
destructor calls DestroyWindow if
m_hWnd is non-NULL, this does not lead
to infinite recursion since the handle
will be detached and NULL during the
cleanup phase.
You can also refer MSDN (Destroying Window Objects ) for further details.
Note:
This works for modeless dialog that can be allocated on the heap.