vc/mfc项目对话框A中一Button控件,点击它弹出一无模对话框B.我是这样销毁B的
void B::OnBnClickedCancel()//重载OnCancel()
{
OnCancel();
this->DestroyWindow();
}void B::OnDestroy()//重载WM_DESTORY消息
{
CDialog::OnDestroy();
delete this;
}
这样会不会造成内存泄漏?这样的代码是不是安全的?请高手指点,谢谢!学习,关注……
void B::OnBnClickedCancel()//重载OnCancel()
{
OnCancel();
this->DestroyWindow();
}void B::OnDestroy()//重载WM_DESTORY消息
{
CDialog::OnDestroy();
delete this;
}
这样会不会造成内存泄漏?这样的代码是不是安全的?请高手指点,谢谢!学习,关注……
2、delete this是多余的,系统也会自己做的所以这两个函数如果只有这些代码的话,都是多余的
delete this怎么是多余的啊?如没有这个new出来的无模对话框B,它的空间就没办法释放了不是吗 ?
CBDlg *pDlg = new CBDlg;
pDlg->DoModal();
delete pDlg;别在该类自身中delete,自己删除自己,呵呵,是人也不爽啊
运行似乎也可以,不过不直观,还是楼上说的好
也就是说用 Creat 不是 DoModal我这个方法是在vc知识库看到的
上面提到2中方法,一中就是上述那种了,还有一种就是发消息给父对话框,让父对话框来delete
不过最好在PostNcDestroy()中,发生在WM_NCDESTROY之后。
一般如果delete this都放在OnNcDestory里面做。
pDlg->Create(nID,NULL);
pDlg->ShowWindow(SW_SHOW);
然后在
void CXXXDlg::OnBnClickedCancel()//重载OnCancel()
{
OnCancel();
this->DestroyWindow();
}void CXXXDlg::OnDestroy()//重载WM_DESTORY消息
{
CDialog::OnDestroy();
delete this;
}
CXXXDlg* pDlg = new CXXXDlg(this);
pDlg->Create(nID,NULL);
pDlg->ShowWindow(SW_SHOW);
创建无模对话框的那么如果点击对话框右上角的"X"会不会调用OnCancel()函数?
怎么一点都不愿意自己试试呢!
当时第一次使用无模时找了很多资料,每个资料都是这样的
class wizard没有啊!
那个好像在class view -》 properties -》 override 里面。垃圾得很,什么都得动鼠标。
你是说vc.net和垃圾吗?那什么比较好啊?C#?
很多地方都没有快捷键了。mfc也是人老珠黄了,用它还可以,学它就不必了吧。C#也是,要用才学,要学就学纯的C++吧。
pDlg->Create(nID,NULL);
pDlg->ShowWindow(SW_SHOW);用 ClassWizard 找到 PostNcDestroy 消息生成如下函数
void CXXXDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this; //加入这句释放
CDialog::PostNcDestroy();
}