当前位置:C++技术网 > 资讯 > MFC GDI 对象[GDI资源泄漏和GDI对象理解]

MFC GDI 对象[GDI资源泄漏和GDI对象理解]

更新时间:2016-08-26 20:02:47浏览次数:1+次

mfc开发中GDI对象是什么?GDI对象包括什么?


上次问的那个“一个mfc程序运行过程中内存不断增加”,感觉是因为GDI对象没有释放的原因。


mfc开发中什么资源使用之后要释放?


C++技术网解答:

    GDI是Windows画图需要的东西,那么GDI对象自然就是和画图相关的东西,如画笔、画刷、字体等。这些东西都是用于修饰画图的,比如可以用笔画线条,那么线条有粗细之分、有各种样式如虚的实的。当然,线条还有颜色。这些都可以通过画笔这个GDI对象来设置,然后选到GDI中。这样画出来的线条就是你设置的画笔的样子。就好比,你买了一种,画出一种不一样线条。如果你要输出文字,文字也是画出来的。文字就有字体之分,所以不同的字体显示的样子都不一样。还有画刷,就好比刷墙的刷子,不同的刷子刷出来的纹路不一样,所以画刷用在大面积的填充方便。GDI对象还有其他一些,就不在这里列举。

    那么什么样的GDI资源需要释放呢?那么这些对象从哪来?要么就是从系统里拿,要么就是自己创建。在系统里拿,就好比是借。有借有还哦。当然,一般系统里拿的都是公共使用的,不会造成明显的资源泄漏,或者不会泄漏。不管你用不用,系统都会准备好的。当然建议有借有还,这是好的习惯。

    不过,系统的是最朴实无华的,满足基本要求,就好比找个女朋友,难找,要求降到最低,是个女的就行。哈哈哈。如果你要漂亮的,那么你得靠自己的本事,去创造。当然,你没法凭空创造一个美女,不过你可以创造钞票。不过GDI对象,我们是可以自己创造的,很多GDI函数都可以直接创造GDI对象的哦。你自己创造的GDI对象,系统就不会帮你管,这样你要是创造一大堆都放在一边,然后也找不到放在哪了,也就造成了GDI资源泄漏。在程序中就是没有指向GDI资源的指针或者没有记录GID对象的变量了。这样你也没法用,就丢失了,就泄漏了。所以你自己创造的,如果不需要的,要赶紧删除。这里叫做删除,不叫释放。从系统获取的叫做释放,毕竟不是你创造的。你也只能说是释放。而你自己创造的,你也可以删除灭掉它。

    不管怎么样,获取系统的GDI对象也好,还是自己创造GDI对象也好,都要在使用完之后正确的释放或者删除了。如果指向GDI对象的指针,在不释放指向的GDI对象就去指向了另一个GDI对象,这就产生了GDI资源泄漏,其实和内存泄露是一样的原理。检查代码找找创建GDI对象的地方,紧跟着看看有没有释放的地方,每一个资源都要被正确释放或删除。

    所以,是使用了什么都要负责,而不是问什么资源使用后要释放。难道你对你使用的有什么想不负责的吗?哈哈哈