VC如何正确的删除C++封装的句柄。。。

参考1:http://blog.csdn.net/oldmtn/article/details/6904697

参考2:http://bbs.csdn.net/topics/390405810


VC中C++类封装了窗口句柄。

C++通常是在析构函数删除动态分配的内存。

而窗口A是在OnDestroy里面删除自己所有的子窗口。


我们不能一会这里删除子窗口,一会那里删除C++类分配的内存,这样太零乱,不易维护和理解。


又因为C++类和窗口句柄被绑定到了一起,不能说这个窗口已经Destory了,但是C++成员变量分配的内存还存在;

也不能说,成员变量分配的内存还在,但是窗口句柄却不存在。这2种可能性都是没有意义的。


因此我们需要一个统一的方法确保窗口被Destroy的话,同时窗口成员变量也不存在。。。


所以我们需要如下的定义:

假设一个CTestWnd派生于CWnd,其作为其他窗口的子窗口。

一般而言,当我们封装该CTestWnd的时候,最好重载其PostNcDestroy函数,这里调用delete this;在窗口被删除后使用delete触发析构函数,

删除C++对象。


这里是对于我们自己封装的窗口类。


但是对于CTestWnd的父窗口,我们只要在其:OnDestroy里面依次调用各个子窗口(CTestWnd)的DestroyWindow函数就可以了。。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值