⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_29369.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:29369 发表者:金枪鱼 发表日期:2003-02-06 11:02:14
<br>主题:关于DC和OBJECT删除操作造成的内存泄漏问题
<br>内容:我们经常要:<BR><BR>创建DC;<BR>创建OBJECT;<BR>......<BR>删除OBJECT;<BR>删除DC;<BR>......<BR><BR>我似乎记得有地方说过:如果这里先删除DC,然后删除OBJECT会导致内存泄漏,但我在网上下载的一些例子中遇到:<BR>......<BR>::DeleteDC(m_hMemDC);<BR>::DeleteObject(m_hBitmap);&nbsp;&nbsp;&nbsp;&nbsp;<BR>m_hMemDC&nbsp;&nbsp;= NULL;<BR>m_hBitmap = NULL;<BR>......<BR><BR>请高手确认一下这种代码顺序是否会导致内存泄漏,删除这个对象后是否还需要令它们等于NULL,并说说其中的道理。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-02-06 13:11:07
<br>内容:我觉得不会导致内存泄漏,因为::DeleteObject(m_hBitmap);中m_hBitmap好像不依赖于DC。<BR>删除这些对象后是否还需要令它们等于NULL则应该根据需要而定,主要是怕后面在没有对m_hBitmap赋新值的情况下又使用,造成非法访问,如:<BR>if(m_hBitmap != NULL)&nbsp;&nbsp;//即使::DeleteObject(m_hBitmap); 但是m_hBitmap不为NULL<BR>{<BR>&nbsp;&nbsp; ......&nbsp;&nbsp; //没有对m_hBitmap赋新值的情况下又使用,造成非法访问<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-02-06 14:28:18
<br>内容:谢谢指点。<BR>我原来使用动态分配的指针对象时在销毁后习惯再加上一句赋值NULL,以便避免野指针的存在。现在看来有些非指针的数据销毁后可能也有必要让它为NULL了。<BR><BR>换句话说,如果其中的对象要依赖于DC,这种代码顺序错了就会导致内存泄漏?<BR>上述代码似乎说的是在设备上下文上处理位图这样一种情况。<BR><BR>但我们处理非视图打印的时候<BR><BR>CDC dc;//构造一个设备上下文环境<BR>.....//处理打印对话框<BR>打印设备环境附加到DC对象<BR>..... <BR>打印操作<BR>映射模式<BR>创建字体画笔等等 <BR>.....打印操作<BR>删除字体、画笔等对象<BR>DeleteDC(dc.Detach()); //删除打印机DC<BR><BR><BR><BR>像这样的过程,其中使用了大量的字图、画笔等对象,一般操作时都要用到dc,这些对象是否要依赖于其中的dc?<BR>2003-2-6 14:31:06

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -