new CRichEditView 后 delete 出错。

yeyi771 2013-07-11 02:39:36
void CBtnDlg::OnOK() 
{
CRichEditView *pView = new CRichEditView;
if(!pView) return;
RECT rt;
rt.left = rt.top = 0;
rt.right = 100;
rt.bottom = 100;
if( !pView->Create(0,"viewWindowName",WS_CHILD|WS_VISIBLE,rt,this,1311) ) return;// 注释掉这句就没问题
delete pView;//动态创建的 RichView Create 后释放就出错 怎么办?
}
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yeyi771 2013-08-13
  • 打赏
  • 举报
回复
跟代码发现貌似 View 有一个变量存被几个东西使用着,最后释放处的代码有判断该值 大于1则有 ASSERT 的错误,释放前把该值改成1或0即可, InternalRelease 函数也有此功能. 但真正的原因还是不明白,主要是看不懂 MFC 源码...
向立天 2013-08-12
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
shen_wei 2013-07-12
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
View类new以后不用delete,CView类重载了CWnd基类的PostNcDestroy虚函数中有delete this;操作。
不错,控件之类的,本身都已经OK了。。莫重复
Zimmerk 2013-07-12
  • 打赏
  • 举报
回复
是因为你的VIEW类没有绑定CDocument类吧,把CRichEditView换成CRichEditCtrl应该就没问题了。
yeyi771 2013-07-12
  • 打赏
  • 举报
回复
你们说的没错,可我试了后又有问题:
// self destruction
void CView::PostNcDestroy()
{
// default for views is to allocate them on the heap
// the default post-cleanup is to 'delete this'.
// never explicitly call 'delete' on a view
delete this;
}
我在这里打了断点,然后把
delete pView; 这一句注释掉
点击OK按钮后程序没有进入CView::PostNcDestroy(),创建的View 也依然在显示着,还可以输字符呢!
当把整个DLG关掉的时候才会进入到 CView::PostNcDestroy() 中.
这又是什么情况?
Eleven 2013-07-11
  • 打赏
  • 举报
回复
View类new以后不用delete,CView类重载了CWnd基类的PostNcDestroy虚函数中有delete this;操作。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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