hur.cn - 华软网

 热门搜索

这样销毁对话框会不会引起内存泄露啊?

  作者:未知    来源:网络    更新时间:2011/8/16
对话框右上角 那个X ---------对应着OnClose。。。  为了实现一个功能,点击X时 隐藏对话框,而 点击Cancel时候,真正的退出销毁对话框。


版本1:

我重载了它,

代码为:

void CMyDialog::OnClose() 
{

ShowWindow(SW_HIDE);   //隐藏对话框

}

然后重载

void CMyDialog::PostNcDestroy() 
{

CDialog::PostNcDestroy();

delete this;

}


其他什么都不做,OnCancel没有重载,会不会引起泄露内存?  创建对话框是new出来的。


版本2:  重载了三个函数:

void CMyDialog::OnClose() 
{

ShowWindow(SW_HIDE);   //隐藏对话框

}


void CMyDialog::PostNcDestroy() 
{

CDialog::PostNcDestroy();

delete this;

}


void CMyDialog::OnCancel() 
{

DestroyWindow();

}


踊跃发言
---华软 网友回答---
对话框右上角 那个X ---------对应着OnClose。。。 为了实现一个功能,点击X时 隐藏对话框,而 点击Cancel时候,真正的退出销毁对话框。
---华软网友回复---
响应WM_DESTROY,在这里delete this

---华软网友回复---
哪个版本会引起内存泄露啊?

说详细点吧 

引用 2 楼 chris820313 的回复:
响应WM_DESTROY,在这里delete this

---华软网友回复---
你只要delete this就不会泄漏,但是我个人觉得放WM_DESTROY里比较好

---华软网友回复---
请问:delete this 放在PostNcDestroy 和OnDestroy里面有什么区别?


为什么放在后者里面较好?

引用 4 楼 chris820313 的回复:
你只要delete this就不会泄漏,但是我个人觉得放WM_DESTROY里比较好

---华软网友回复---
Nc代表非客户区,你放哪里也可以吧,但是感觉怪怪的,WM_DESTROY是窗口销毁消息 该消息调用DestroyWindow销毁窗口。
---华软网友回复---
你讲的和网上说的差异很大

他们都说要放在PostNcDestroy中

另外还要在OnCancel加一句:DestroyWindow


引用 6 楼 chris820313 的回复:
Nc代表非客户区,你放哪里也可以吧,但是感觉怪怪的,WM_DESTROY是窗口销毁消息 该消息调用DestroyWindow销毁窗口。

---华软网友回复---

对于一个问题的解决办法可不止一种  支持chris820313  只要delete了 应该不会有内存泄漏了吧
---华软网友回复---
应该不会的,我以前这样干过。。。
不放心可以循环个几万次,看看内存的情况嘛      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。