OnClose与OnDestroy引发的内存泄露问题

来源:互联网 发布:上位机编程 编辑:程序博客网 时间:2024/05/24 07:35

今天在调一个内存泄露的问题,把代码找遍也未发现任何泄露的踪迹吐舌头。最后,突然发现,使用单文档的小'X‘号关闭未发生内存泄露,但直接关闭整个工程,oh my god!泄露来了。

说明环境:xp+vs2008+MFC MultiDocument

  • who take the cake?

然后在程序退出的各大关口设置断点。OnClose函数是必须要看的,发现关闭一个文档时,正常调用了OnClose函数,但是直接关闭整个工程时,并没有调用单个文档的OnClose函数。

额!

MFC中的特性吧。那么当需要退出时,释放空间怎么办?析构函数肯定是能进去的,但是总不能在析构函数中去释放资源吧(为什么不了?)。我又重载了OnDestroy函数,设置断点查看。

  • “幸福来敲门了”

关闭单个文档和关闭整个工程都会进入OnDestroy函数。

那么,下次一定要记住MFC的这个特性,程序关闭时是一定会调用OnDestroy消息,OnClose则不一定。从词语意思上也了解出来,OnClose是比较温柔的,但是OnDestroy则暴力了许多。那么直接关闭整个工程时,没有一个个去关闭其中的单个文档,确实很暴力。也难怪会只有OnDestroy消息。

原创粉丝点击