我在为一个按钮写消息响应时,动态创建一个属性页,需要分配内存,而且不能释放
void C**Dlg::OnCreatNewPage() 
{
// TODO: Add your control notification handler code here
CMessageDlg* newMsgDlg = new CMessageDlg;
m_PageSheet.AddPage(newMsgDlg);
m_PageSheet.SetActivePage(newMsgDlg);
// 最后不能释放这块内存,因为后面还有用到 
}那么我在响应关闭分页的按钮时,如何去释放这块指定的内存呢?

解决方案 »

  1.   

    C**Dlg这个对话框销毁时在销毁CMessageDlg和释放内存。
      

  2.   

    用链表保存该内存的指针,最后检查该链表是否为空,不为空就free它
      

  3.   

    把CMessageDlg* newMsgDlg保存成类成员等,用完释放
      

  4.   

    如果需要多个指针
    添加个list成员来保存这些指针,用完先delete,然后从list中erase掉,并在最后做list清理
      

  5.   

    CMessageDlg* newMsgDlg
    这是为成员变量,保存指针即可。
    如果要创建多个的话可以使用链表或数组保存其对象的指针。在C**Dlg对话框销毁时释放内存即可
      

  6.   

    你可以定义一个数组,专门存储动态创建的属性页的地址,然后在析构函数中遍历这个数组,依次delete之...
    操作数据库,我曾经这样整过...
      

  7.   

    通常应该把 CMessageDlg* newMsgDlg 定义为 C**Dlg 的成员变量,且在 C**Dlg 的初始化函数中执行:CMessageDlg* newMsgDlg = new  CMessageDlg;
    m_PageSheet.AddPage(newMsgDlg);
    m_PageSheet.SetActivePage(newMsgDlg);在响应按钮消息时直接显示 newMsgDlg 即可,不必每次点击都创建对象;
    在 C**Dlg 的析构函数中释放内存。
      

  8.   

    CMessageDlg的是释放了,但是C**Dlg中的还没有释放
      

  9.   

    void C**Dlg::OnCreatNewPage()这个函数功能是创建一个非模态对话框,有可能重复点击,如果定义为成员变量的话,要指定能够创建的非模态对话框的个数之后分配内存,而我是想不限制创建的个数。
      

  10.   

    可以用一个链表,保存你NEW出来的内存的指针,然后看看是不是空,不是空就delete。
      

  11.   

    用一个链表保存出你NEW出来的指针。然后看看是不是空,不是空就释放。
    关于前面说放在成员变量里面,个人感觉不行,因为按钮式经常按的,按几次就NEW几次,成员变量只能保存你最后NEW出来的。如果只有一个属性页,那就保存在成员变量里面。
      

  12.   

    CMessageDlg* newMsgDlg = new CMessageDlg;在你的 CMessageDlg 类里的释构函数里加上 delete this;
      

  13.   

    说错了,是在窗口的销毁的函数里面 delete this
      

  14.   

    声明为 成员变量指针。
    然后在OnDestroy()中判断指针是否为NULL
    否则 销毁。
    if(newMsgDlg !=NULL)
    {
      delete newMsgDlg ;
      newMsgDlg =NULL;
    }
      

  15.   

    CMessageDlg* newMsgDlg;//此句放到C**Dlg类的头文件中区 
    void C**Dlg::OnCreatNewPage()  
    {
    // TODO: Add your control notification handler code here
    newMsgDlg = new CMessageDlg;
    m_PageSheet.AddPage(newMsgDlg);
    m_PageSheet.SetActivePage(newMsgDlg);
    // 最后不能释放这块内存,因为后面还有用到  
    }