-
-
[分享]非模态对话框例子存在内存泄露问题
-
发表于:
2008-10-10 17:42
7897
-
最近正在读你的《windows 编程循序渐进》,对我这个初学者很有帮助
。
第二章 创建的非模态对话框的例子里, 实际上是存在内存泄露的, 因为没有delete 指向对话框的指针, 这一点可以在debug结束后的报告里看到。
我想最简单的解决方法可以override掉OnCancel(),PostNcDestroy() 函数。
void CMyNoModalDialog::OnCancel()
{
DestroyWindow();
}
void CMyNoModalDialog::PostNcDestroy()
{
delete this; //删除对话框指针
CDialog::PostNcDestroy();
}
CWnd::DestroyWindow 会发送WM_DESTROY 和 WM_NCDESTROY 消息,来销毁窗口。PostNcDestroy() 是销毁非客户端窗口最后调用的一个函数OnNcDestroy()所调用的一个虚函数,在这里可以处理我们自己的清楚工作,例如delete指针。
通常非模态对话框的确定按钮彼岸时确认所填写的数据或者所做的选择,而取消按钮或者系统菜单的叉叉是退出该对话框,因此我们只要关注OnCancel()就可以了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课