我要释放new申请的内存,但是MFC自动生成的对话框类里没有析构函数,我自己申明了一个,但是却不管用,退出的时候析构函数并没有被调用。因为我在析构函数里的TRACE()并没有输出结果。这是为什么?
我这样声明的:
class CCpuDlg : public CDialog
{
// Construction
public:
virtual  ~CCpuDlg();
//...........
}
退出时这个函数没有被调用,不申明为虚拟的也没有调用

解决方案 »

  1.   

    Are you sure?????????????????????
      

  2.   

    重载 WM_DESTROY 消息处理,在里边释放
      

  3.   

    试过了,可以进入析构函数。
    你把头文件内容贴出来,或者最简单的办法,你新建一个对话框的APP,参考他自动添加的代码中的声明。
      

  4.   

    删掉Debug,重新编译试试!
      

  5.   

    声明:WORD **mem_bg,**mem_obj,**mem_buff;
    释放: delete []mem_bg;
    delete []mem_obj;
    delete []mem_buff;
    问题是,函数编译和执行都没错,但是析构函数在退出饿时候根本就没进去。设了断点的,没进去。
      

  6.   

    照唐勇说的,删了debug,还是不行
      

  7.   

    你建立的是对话框程序吗?CCpuDlg 是你的主对话框吗?
    很怀疑你是否实例化了一个CCpuDlg 对象
      

  8.   

    什么意思?是主对话框啊。什么叫实例化了一个dlg对象?
      

  9.   

    应该是实例化了,它是主对话框,app必须给它实例化啊
      

  10.   

    如果new了,才需要delete,没new的话,delete干嘛?
    参考:
    CAddGuide::CAddGuide(CWnd* pParent /*=NULL*/)
    : CDialog(CAddGuide::IDD, pParent)
    {
    m_pInfo = NULL;
    m_Speed = "115200";
    m_Progress = new IProgressPlugin();
    }CAddGuide::~CAddGuide()
    {
    delete m_pInfo;
    if(m_Progress != NULL)
    {
    delete m_Progress;
    }
    }
      

  11.   

    你新建一个基于对话框的APP看看,也许就清楚了
      

  12.   

    当然new了,问题是,程序退出时根本没进入析构函数。应该说这个类消亡的时候应该自动调用析构函数的啊
      

  13.   

    楼主你调用 delete 没有?
      

  14.   

    调用了啊
    CCpuDlg::~CCpuDlg()
    {
    delete []mem_bg;
    delete []mem_obj;
    delete []mem_buff;
    TRACE("退出时调用析构函数");
    }
    退出时并没有TRACE
      

  15.   

    你Debug下看看,进入了析构函数中去了没有不就知道了
      

  16.   

    楼主我意思是,你对话框是不是 new 出来的,然后没 delete?
      

  17.   

    就是因为debug了没进去才觉得不理解的啊
      

  18.   

    CxxxApp里面是这样写的吗?.....
    CCpuDlg  dlg;
    if (dlg.DoModal() == IDOK)
    .....如果是这样写的话,他会在initinstance函数返回的时候才会调用CCpuDlg的析构函数,所以你得等到该程序执行完成时才看得到