1、在dlg类中手动增加析构函数,在析构函数中释放内存。
(1)在头文件的类声明中,添加析构函数声明
class CTestDlg : public CDialog
{
public:
virtual ~CTestDlg();//析构函数声明,virtual可写可不写。
}
(2)在cpp文件中添加西沟函数定义
CTestDlg::~CTestDlg()
{
//add your code
}
2、添加消息响应函OnDestroy()函数(消息WM_DESTROY的响应函数)
窗口关闭时,程序会首先抛出消息WM_DESTROY,所以可以直接在OnDestroy()中释放内存。
另,从CDialog的源码.它也只是判断了一下句柄,然后调用DestoryWindow发送WM_DESTROY消息,所以只要你在消息响应函数OnDestroy里处理就可以了.
CDialog::~CDialog()
{
if (m_hWnd != NULL)
{
TRACE(traceAppMsg, 0, "Warning: calling DestroyWindow in CDialog::~CDialog --\n");
TRACE(traceAppMsg, 0, "\tOnDestroy or PostNcDestroy in derived class will not be called.\n");
DestroyWindow();
}
}
补充:
虚析构函数:
1、程序会先调用派生类的析构函数,再调用基类的析构函数。
2、如果基类的析构函数声明为虚函数,由该基类所派生的所有派生类的析构函数都自动成为虚函数(即使派生类的析构函数与基类的析构函数名字不相同)