GDI:deleteObject,delete and detach()


一些通过FromHandle()或者Create...()获得的指针需要delete吗?
   我知道很多gdi对象在Create后需要使用DeleteObject()释放其句柄,但是否需要delete呢?
  
  我给你说三种情况,但我们首先做一个假设,就是MFC封装的GDI类在析构时没有做任何动作,也就是说,它是个纯粹的“简单封装”,那么:
   1。pBmp->Detach将使C++的对象与GDI对象分离开来,但二者都没有释放。此时必须分别用delete pBmp和DeleteObject将二者分别释放;
   2。pBmp->DeleteObject将使GDI对象被释放,而C++对象本身不会释放。你可以用Attach重新使其与某个GDI对象关联,或者,用delete将其释放;
   3。delete pBmp(注意,我们假定析构时不调用DeleteObject)将使C++对象消亡,而对应的GDI对象依然存在。要使GDI对象释放,必须再次调用DeleteObject。
   注意上面说的第三种情况,在实际的MFC实现中,为了简化程序员的负担,在C++对象析构时,与之关联的GDI对象也会释放。我之所以这样假定,是为了让你明白C++对象与GDI对象的区别。
   还有,new的东西不是在栈里,而是在堆里。

 

(还不明白的,仔细看msdn)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值