今天在调一个内存泄露的问题,把代码找遍也未发现任何泄露的踪迹。最后,突然发现,使用单文档的小'X‘号关闭未发生内存泄露,但直接关闭整个工程,oh my god!泄露来了。
说明环境:xp+vs2008+MFC MultiDocument
- who take the cake?
然后在程序退出的各大关口设置断点。OnClose函数是必须要看的,发现关闭一个文档时,正常调用了OnClose函数,但是直接关闭整个工程时,并没有调用单个文档的OnClose函数。
额!
MFC中的特性吧。那么当需要退出时,释放空间怎么办?析构函数肯定是能进去的,但是总不能在析构函数中去释放资源吧(为什么不了?)。我又重载了OnDestroy函数,设置断点查看。
- “幸福来敲门了”
关闭单个文档和关闭整个工程都会进入OnDestroy函数。
那么,下次一定要记住MFC的这个特性,程序关闭时是一定会调用OnDestroy消息,OnClose则不一定。从词语意思上也了解出来,OnClose是比较温柔的,但是OnDestroy则暴力了许多。那么直接关闭整个工程时,没有一个个去关闭其中的单个文档,确实很暴力。也难怪会只有OnDestroy消息。