new出来的MFC对象是否需要delete? CWND * wnd = new CWND();像这类的指针需要在退出时delete掉吗?还是让MFC自己处理? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 there is no garbage collection mechanism in the MFC programming.you must free memory manually. 一定要,虽然不用delete不一定出错,编译也能通过,但是程序运行不释放内存空间是不行的.这也是程序优化必须考虑的一个因素 等不需要用到它的时候手动delete,一般都会报错吧 我在一个DLL中有一个CWnd和一个HWND变量:CWnd *wnd;HWND hWnd;在一个DLL接口函数中:wnd = new CWnd();wnd->CreatEx(...);hWnd = wnd->GetSafeWnd();我在一个DLL接口函数Close中写了如下删除的代码:if(theApp.hWnd) //1{ DestroyWindow(theApp.hWnd); theApp.hWnd = NULL;} if(theApp.wnd) //2{ delete theApp.wnd; theApp.wnd = NULL;}2处会发生错误.请问这段代码哪里有问题? 在c++中, 有new必有delete,否则泄露。.net除外。 2改成:if(theApp.wnd) //2{theApp.wnd->DestroyWindow();delete theApp.wnd;theApp.wnd = NULL;}结果一样.错误是Debug Assertion Failed,点重试则跳到wincore.cpp的如下语句:ENSURE(pMap != NULL); 在http://up-u.com/archives/106看到一篇文章,说重载这个虚函数 CWnd::PostNcDestroy() ,然后里头调用 delete this.为什么要用这个方法呢? 重载PostNcDestroy问题依旧, 但是重载OnNcDestroy后成功删除了CWnd*对象.这两个函数都没有自动调用, 我是手动呼加OnNcDestroy()来完成的.不知道这个方法对不对, 或者还有没有其它方法? 按楼上的方法改了编译运行都正常.但是不知道具体原因, 为什么这样可以? 还有这个跟delete this的方法有何不同? 望高手指点一二! 按liwz123的方法改了后还是遇到了问题, 我想这是因为这个删除操作并不能保证后面就不用这个cwnd了, 最后还是用OnNcDestroy这个方法.谢谢大家的参与.希望对这个有个更深入的讨论. 怎么实现如图的布局? 给我点建议,谢谢 紧急求助 TransparentBlt和打印的问题 variant 中的VT_DATE类型应该怎样用? 急求ListCtrl控件的源代码!!!! ****急救!有用vc++编的类似sniffer的程序源码吗?高分求救 关于字体显示的一个问题 拜求:运动车辆的检测的方法后代码 找老师! 关于计数器焦点的问题 菜鸟送分问题之——如何正确建立和销毁对话框类?
CWnd *wnd;
HWND hWnd;在一个DLL接口函数中:
wnd = new CWnd();
wnd->CreatEx(...);
hWnd = wnd->GetSafeWnd();我在一个DLL接口函数Close中写了如下删除的代码:
if(theApp.hWnd) //1
{
DestroyWindow(theApp.hWnd);
theApp.hWnd = NULL;
}
if(theApp.wnd) //2
{
delete theApp.wnd;
theApp.wnd = NULL;
}
2处会发生错误.
请问这段代码哪里有问题?
.net除外。
if(theApp.wnd) //2
{
theApp.wnd->DestroyWindow();
delete theApp.wnd;
theApp.wnd = NULL;
}
结果一样.
错误是Debug Assertion Failed,点重试则跳到wincore.cpp的如下语句:
ENSURE(pMap != NULL);
为什么要用这个方法呢?
这两个函数都没有自动调用, 我是手动呼加OnNcDestroy()来完成的.
不知道这个方法对不对, 或者还有没有其它方法?
但是不知道具体原因, 为什么这样可以? 还有这个跟delete this的方法有何不同? 望高手指点一二!