+ -
当前位置:首页 → 问答吧 → delete this

delete this

时间:2011-12-17

来源:互联网

void CTestDlg::PostNcDestroy() 
{
// TODO: Add your specialized code here and/or call the base class
delete this; //销毁c++对象

CDialog::PostNcDestroy(); //销毁窗口对象
// delete this; //销毁c++对象
}


然后进入析构函数。。。。。

执行完后,再回到PostNcDes......

然后程序没有提示错误。。。。。

什么原因??、



标准做法先销毁对话框的这个窗口
然后销毁对应的C++ 对象


这里反过来,却没有错

作者: caddor2011   发布时间: 2011-12-17

delete this;
======
用scott meyer的话来说就是:
远离写这样代码的人

作者: mingliang1212   发布时间: 2011-12-17

说实话,是很危险,我是不敢写这句话的,需要对对象生存期有绝对的控制。
不过ace的例子里有很多delete this,
貌似开源软件的作者们都很强。。。

作者: yao_great   发布时间: 2011-12-17

要看 CDialog::PostNcDestroy
这句话里面有没有引用CTestDlg的对象,同时现在编译的是debug版还是release版

作者: yao_great   发布时间: 2011-12-17

除非对象是new出来的,否则所有delete this都会出错

作者: namelij   发布时间: 2011-12-17


msdn 的做法就是如此



引用 1 楼 mingliang1212 的回复:

delete this;
======
用scott meyer的话来说就是:
远离写这样代码的人

作者: caddor2011   发布时间: 2011-12-17

标准做法先销毁对话框的这个窗口
然后销毁对应的C++ 对象


这里反过来,却没有错


问题的重点在于 顺序,

而不是该不该用delete this

作者: caddor2011   发布时间: 2011-12-17