在 MFC 单文档应用中,有一个对话框类 CMyDialog ,当我在单击一个菜单项时建立这个类的实例,如下:====================================
void CXxx::OnFunction()
{
  CMyDialog MyDialog;  MyDialog.DoModal();
}
====================================对于打开对话框的实例,我一直都是上边这样做的。但是,我发现这样做我自己并没有销毁对话框,不知道系统是不是会帮我销毁对话框?最好能彻底释放掉这个对话框申请的资源,因为这个函数退出后,这个对话框的生命应该结束了。另外,是否还有其它更好、更安全的方法?请高人指点谜津!

解决方案 »

  1.   

    你这个是模式对话框,模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用
    CWnd: : DestroyWindow来中止的,
      

  2.   

    模式对话通过调用CDialog : : EndDialog 来中止,无模式对话则是调用
    CWnd: : DestroyWindow来中止的
      

  3.   

    你问的是变量生命周期问题,模态对话框在domodal后还是存在的,但是由于对话框对象是OnFunction()中的变量,其生命要到OnFunction()结束时,才会结束,它会自动销毁,这一点不用担心,如果你在该对话框类中动态申请了内存而没有销毁(其他任何类中也一样),那倒是问题,会引起内存泄漏,会导致内存被无谓占用。
      

  4.   

    自己看下OnOK函数就晓得了,调用CDialog::OnOK() 里面EndDialog
      

  5.   

    可能大家都误会了,其实我指的是 MyDialog 这个变量是否要销毁?还是 OnFunction 函数结束时会自动销毁?就象 int i 变量一样,不需要手工去销毁。
      

  6.   

    这不是C++语法问题吗?
    MyDialog 是在栈上创建的 生存期是在 OnFunction()
    里面的 函数结束后,自然也就被销毁了
      

  7.   

    谢谢,我没学过C++,所以不太清楚。还有,为什么有人这样用:new ...delete ...我不明白?
      

  8.   

    瀑布汗 没学C++ 也没用VC啊new 出来的 是在堆上动态申请的 需要自己管理的
    所以需要delete掉 要不然内存泄漏这些问题 还是找本 C++ 书看吧 要不然你 学VC是很困难的
      

  9.   


    我高中毕业,没上过大学,好多东西都不懂。以前用PB的,现在改用 VC ,糊里糊涂的编写 MFC 程序,所以没啥概念。以后还请各位高手多多指点!