作者:人生若只如初见


一些通过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)