void CFrameWnd::PostNcDestroy()中的一个问题
//CFrameWnd::PostNcDestroy()中的代码如下,
void CFrameWnd::PostNcDestroy()
{
delete this;
}
//我的疑问就是 为什么要delete this ??????这是干吗,要释放的在析构函数里释放了吗???
我们平时自己写的非窗口类不是也有this指针吗? 我们根本就没去delete 该指针
问题点数:20、回复次数:3Top
1 楼modena(非云)回复于 2005-08-03 11:46:44 得分 7
CFrameWnd窗口需要维持于整个进程的生存周期,在APP的InitInstance中new,没有地方被释放
所以在这里被释放
类似的做法:无模式对话框的释放Top
2 楼iGray(i_冲锋陷阵)回复于 2005-08-03 12:39:12 得分 7
new出来的需要有一个delete来释放,他们是一对对出现的。
如楼上所说,CFrameWnd是在APP的InitInstance中new出来的,PostNcDestroy用来执行窗口消毁后最后的清理工作,通常是释放这样new出来的东西和涉及到句柄类的系统资源Top
3 楼orbit(走了走了)回复于 2005-08-03 12:59:51 得分 6
delete this会引起析构函数的调用
所有的class都有this指针,不光是窗口类
CFrameWnd是New出来的,所以可以这样用,创建在栈或全局数据区的变量不能这样用
PostNcDestroy是CWnd的虚函数,在窗口完全销毁候被调用,通过delete this可以释放这个窗口对象,非MFC的窗口类不能这样用PostNcDestroyTop
相关问题
- void
- 如何在CFrameWnd类中加入。。。
- void* void**
- 为什么想在CFrameWnd中画背景重载OnEraseBkGround不行
- 请问在CFrameWnd中 如何 访问到CView 或是CDocument
- 我问你答:在CFrameWnd类中,oncreate()与oncreateclient的区别!?
- 如何在从CFrameWnd继承下来的窗口中创建BUTTON?
- 非模态对话框在PostNcDestroy()中delete this报错
- vc中的函数void des_ecm(const void *i_blk, void *o_blk, void *key)如何在VB中声明?
- 救命啊!CFrameWnd




