主题:这样制作MODELESS对话框好吗
这是制作MODELESS对话框的一段代码。
void CMmDlg::OnModeless()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CString str = "非模式对话框";
CBuildDialog *NewDialog;
NewDialog = new CBuildDialog;
NewDialog->m_Type.Format("%s",str);
NewDialog->Create(IDD_NEWDIALOG);
NewDialog->ShowWindow(SW_RESTORE);
}
MSDN上说产生MODELESS对话框要用Create(),第一种方式如上面的代码所述;第二种改写对话框的构造函数,即在对话框构造函数的最后添加一个Create函数的调用。
对于第一种情况我有点疑问。现在在看 戴博 周杨 龚涛 李仪 等编著的visual c++程序员成长攻略。这个代码是从这本书上抄来的。
我的疑问是new了一个对象后没有调用delete,是否会造成内存泄露。因为函数结束后好像没有handle能够供我们找到这个存在于堆里对象。
下面的方式会在函数退出后由析构函数释放资源
void CMmDlg::OnModel()
{
// TODO: Add your control notification handler code here
CString str = "模式对话框";
CBuildDialog NewDialog;
NewDialog.m_Type.Format("%s",str);
NewDialog.DoModal();
}
MODELESS对话框在函数结束后仍然有效,因为对话框没有销毁时,程序仍然能够执行下去。那么如果第一个部分代码没有造成内存泄露,它的机制是怎样的。
void CMmDlg::OnModeless()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
CString str = "非模式对话框";
CBuildDialog *NewDialog;
NewDialog = new CBuildDialog;
NewDialog->m_Type.Format("%s",str);
NewDialog->Create(IDD_NEWDIALOG);
NewDialog->ShowWindow(SW_RESTORE);
}
MSDN上说产生MODELESS对话框要用Create(),第一种方式如上面的代码所述;第二种改写对话框的构造函数,即在对话框构造函数的最后添加一个Create函数的调用。
对于第一种情况我有点疑问。现在在看 戴博 周杨 龚涛 李仪 等编著的visual c++程序员成长攻略。这个代码是从这本书上抄来的。
我的疑问是new了一个对象后没有调用delete,是否会造成内存泄露。因为函数结束后好像没有handle能够供我们找到这个存在于堆里对象。
下面的方式会在函数退出后由析构函数释放资源
void CMmDlg::OnModel()
{
// TODO: Add your control notification handler code here
CString str = "模式对话框";
CBuildDialog NewDialog;
NewDialog.m_Type.Format("%s",str);
NewDialog.DoModal();
}
MODELESS对话框在函数结束后仍然有效,因为对话框没有销毁时,程序仍然能够执行下去。那么如果第一个部分代码没有造成内存泄露,它的机制是怎样的。