如题目所示,我在Dialog的OnInitDialog()函数中使用SetTimer( 1, 1000, NULL )开了一个定时器。
我这个Dialog类不是使用DoModal函数显示出来的,是通过下面方式构造并显示出来的:m_pDlg = new CDlgRealAlarm();
m_pDlg->Create(IDD_DLGREALALARM_DIALOG, this);
m_pDlg->ShowWindow(SW_SHOW);其中m_pDlg是CDialog类的实例。最后是通过如下方式销毁的:if (m_pDlg!= NULL)
delete m_pDlg;
m_pDlg = NULL;我为这个dialog添加了一个析构函数,最初我在析构函数中调用KillTimer(1)来销毁定时器。
但是程序执行到析构函数中KillTimer(1)这个函数,就死掉。
我把这个函数从析构函数中擦掉,就没事了。
但是我担心没有调用KillTimer(1)函数会不会引起资源泄漏?Dialog退出的时候会不会自动销毁定时器(通过new和delete这种方式构造和销毁的dialog)?
请各位兄弟姐妹指点!
我这个Dialog类不是使用DoModal函数显示出来的,是通过下面方式构造并显示出来的:m_pDlg = new CDlgRealAlarm();
m_pDlg->Create(IDD_DLGREALALARM_DIALOG, this);
m_pDlg->ShowWindow(SW_SHOW);其中m_pDlg是CDialog类的实例。最后是通过如下方式销毁的:if (m_pDlg!= NULL)
delete m_pDlg;
m_pDlg = NULL;我为这个dialog添加了一个析构函数,最初我在析构函数中调用KillTimer(1)来销毁定时器。
但是程序执行到析构函数中KillTimer(1)这个函数,就死掉。
我把这个函数从析构函数中擦掉,就没事了。
但是我担心没有调用KillTimer(1)函数会不会引起资源泄漏?Dialog退出的时候会不会自动销毁定时器(通过new和delete这种方式构造和销毁的dialog)?
请各位兄弟姐妹指点!
re:但是我担心没有调用KillTimer(1)函数会不会引起资源泄漏? 定时器不kill会引起很难发现的内存泄露
OnDestroy比 OnClose 更合适。
当我的dialog是new出来的时候,dialog被delete的时候,根本就不进OnDestroy里面。
因为最初我也是这么用的,因为不进入OnDestroy执行,所以我把KillTimer放在了析构函数里。
导致了现在问题的出现。