请问各位大侠 我在一个模态对话框a中 CbDlg *bb;
点击一个按钮出现非模态对话框b(是这样实现的:  bb=new CbDlg;
                                               bb->Creat(IDD_b);
                                               bb->->ShowWindow(SW_SHOW);)
那么我模态对话框a中的bb指针如何释放啊,以及在哪释放?而我生成的非模态对话框b 应该如何在b中销毁啊  我是重载OnCancel函数,并在析构函数中DestroyWindow();  
然后OnCancel就直接销毁了 我这样理解对吗?

解决方案 »

  1.   

    在CbDlg里的PostNcDestory
    标准做法
      

  2.   

    When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don't call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. Modal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup. 
      

  3.   

    谢谢各位了 那么我模态对话框a中的bb指针如何释放啊,以及在哪释放?
      

  4.   

    但是我是a中定义的bb指针啊 
    也是在b里面释放?  那里面应该是销毁非模态对话框b的吧
      

  5.   


    在A需要销毁bb的地方,调用bb->DestroyWindow()就可以了,DestroyWindow里面回调用PostNcDestory,他就会把你new出来的那块内存通过delete this释放掉!
      

  6.   

    在a的析构函数destroy 和 delete个人觉得delete this的方法值得商榷,
    我不知道哪里来了个“标准做法”,
    这种做法在MFC文档视图结构用过,我现在的项目中也用过,
    但我不推荐
      

  7.   

    但是a是模态对话框啊,DestroyWindow里面回调需要用PostNcDestory吗?
      

  8.   

    另外我在对话框a中的  CbDlg *bb;是个全局变量
    那么我在析构函数中 delete bb;有作用吗
      

  9.   

    如果你不用1楼的方法
    就要自己在a的OnDestroyWindow里调用bb-〉DestroyWindow();
    然后再a的析构函数里delete bb;
      

  10.   

    请问大家应该怎么测试 是否已经把new出来的那块内存释放掉了啊
      

  11.   

    在debug模式下,如果你没有释放,在程序退出的时候,你会看见 output框中会有内存泄漏信息.
    如果释放的就不会有泄漏信息了.
    通过这个,可以看你的bb是否被释放了
      

  12.   

    如果是release模式呢 该如何判断啊
      

  13.   

    debug判断就可以了
    转到release只是编译属性有变化
    和代码没关系