我有一个应用程序,其中有很多窗口,每个窗口都有一个不同的CDialog
派生类。
我的应用程序多年来一直运行良好,delete this
但PostNcDestroy()
现在我环顾四周,我没有看到任何正确或需要的证据。摆脱我的CDialog
子类对象的正确方法是什么?
我有一个应用程序,其中有很多窗口,每个窗口都有一个不同的CDialog
派生类。
我的应用程序多年来一直运行良好,delete this
但PostNcDestroy()
现在我环顾四周,我没有看到任何正确或需要的证据。摆脱我的CDialog
子类对象的正确方法是什么?
如果对话框是无模式的,那么调用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;
}