我有一个应用程序,其中包含多个不同的CDialog
派生类的窗口。
我的应用程序在delete this
调用PostNcDestroy()
多年来工作正常但现在我正在环顾四周,我看不到任何正确或需要的证据。什么是摆脱我的CDialog
- 子类对象的正确方法?
答案 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;
}