MFC:单击窗口关闭按钮;窗口对象没有被破坏

时间:2015-11-27 17:00:23

标签: mfc destructor cdialog

我有一个应用程序,其中包含多个不同的CDialog派生类的窗口。

我的应用程序在delete this调用PostNcDestroy()多年来工作正常但现在我正在环顾四周,我看不到任何正确或需要的证据。什么是摆脱我的CDialog - 子类对象的正确方法?

1 个答案:

答案 0 :(得分:0)

如果对话框是无模式的,那么在delete this;中调用PostNcDestroy是正常的做法。

请参阅:https://support.microsoft.com/en-us/kb/103788

在解除对话后,您需要格外小心,不要访问悬空指针。

例如,我们这样做:

void CMainFrame::DoSomething()
{ 
   MyModelessDialog* p = new MyModelessDialog;
   p->Create(IDD_MODELESS_DIALOG, ... );
}

/// ...
void MyModelessDialog::PostNcDestroy() 
{
    __super::PostNcDestroy(); // call base class to do clean up before deleting.
    delete this;
}