new 出来的 CDC 对象, 使用DeleteDC() 是否应该把指针Delete掉?

iam68620963 2009-05-22 09:55:25
我们知道 CDC * pDC = GetDC();可以获取到当前的CDC ;
GetDC() 对应的释放方法是归还资源 ReleaseDC(); 就OK了

那么CDC * pDC = new CDC;
就应该对应pDC->DeleteDC().
DeleteDC()是把资源DC 给释放掉了..
那么指针pDC该怎么办呢? 它依然指一块动态内存.
只是里面的内容被释放掉了,但是这个内存并没有释放.
理论上来讲的话,就应该更补上一句 Delete pDc;
这样就可以释放这块内存了.. 但是问题就出现在这里.
在一些程序当Delete pDC不会报错,有就会报错,情况很不稳定,所以向各位大鸟们请教请教~~


A)
CDC *pDC = GetDC()
pDc->ReleaseDC();

CDC * pNewDc = New CDC;

if (NULL != pNewDc)
pNewDc->DeleteDC();
pNewDc = NULL;

B)

CDC *pDC = GetDC()
pDc->ReleaseDC();

CDC * pNewDc = New CDC;
if (NULL != pNewDc)
pNewDc->DeleteDC();
if (NULL != pNewDc)
delete pNewDc;
pNewDc = NULL;
...全文
360 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iam68620963 2009-05-22
  • 打赏
  • 举报
回复
2楼,我只是指对性的指出 new CDC 和 Delete DC 的用法..
new 以后的操作当然就不需要列出来了.
mengde007 2009-05-22
  • 打赏
  • 举报
回复
不会;
yyunffu 2009-05-22
  • 打赏
  • 举报
回复
CDC * pNewDc = New CDC; 这个仅仅new出了个CDC对象,没有获得实质的句柄,
pNewDc->DeleteDC(); 这个调用不会出错?
  • 打赏
  • 举报
回复
这种事情跟踪一下MFC的代码就完全清楚了。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧