像这段代码中的m_pInput要怎样Delete??void CMainFrame::OnInputUnit() 
{
// TODO: Add your command handler code here
m_currentwin=1;//录入
if(m_pInput!=NULL)
{
m_pInput->MDIActivate();
return;
} m_pInput=new CRaChildFrame();
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CInputCertView);
if(!m_pInput->LoadFrame(IDI_ICON3,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
return;
m_pInput->ShowWindow(SW_SHOWMAXIMIZED);
m_pInput->InitialUpdateFrame(NULL,true);
}

解决方案 »

  1.   

    函数退出之后 m_pInput还需要有效么?看情况使用auto_ptr吧,应该不麻烦的
      

  2.   

    1.不需要释放
    2.CRaChildFrame::OnNcDestroy()
    {
    delete this;
    }
      

  3.   

    try
    {
       .........
    }
    finally()
    {
       if(m_pInput)
          delete m_pInput;
    }否则 就 返回以前 delete
      

  4.   

    除非需要不断大量的生成新的m_pInput否则不需要释放
      

  5.   

    看m_pInput的具体作用域,其它人不知道逻辑,也不知道该什么时候释放
      

  6.   

    不需要使用的时候delete,比如在CMainFrame::~CMainFrame()中
      

  7.   

    多谢大家的回复!
    1楼的那方法我没试过!能详细说说吗?
    2楼的方法试过了,不行
    3楼的更不行
    4楼,我就是不知道在哪,何时释放
    5楼,不释放是否会有内存泄露?这是通过菜单调用FormView的代码。程序肯定会经常调用这样的代码的。
    6楼,能给个思路吗?
    7楼,这样做能行吗?
    8楼,同上
      

  8.   

    那你就别释放了,
    首先,你的这个指针,只有在为NULL的时候才new的,之后就不需要new了,也就是说在程序运行期间只new出来一个
    所有在进程中申请的指针,在进程退出的时候,系统都会自动的释放的,因此也不用担心占用资源的问题。
      

  9.   

    补充:
    7楼,这样做好像不行。例如,我刚生成一个FormView(就是调用这段代码),然后关了。又打个这个FormView,是不是就不行了啊。都New了几次了。
    我觉得应该是在FormView关闭的时候Delete,可就不知道该怎么写,也不知道写在哪个函数中。
      

  10.   

    我现在就是没释放的,只是让m_pInput=NULL.这样我就能关了,重新再打开。
    我只是想知道这种情况要怎样才能释放掉这个指针!!
      

  11.   

    LZ在哪里给m_pInput=NULL赋值的, 就可以在那里调用delete m_pInput。
    只是赋值,肯定会内存泄露。
      

  12.   

    2.CRaChildFrame::OnNcDestroy() 

    delete   this;
    AfxGetMainFrame()->m_pInput=NULL;
    }
    怎么会不行呢?
      

  13.   

    CXXXView类属于可动态创建的类,MFC针对可动态创建的类都加入了自动释放的代码,这个代码就在类的OnNcDestroy函数里,只是一句简单的 delete this;如果你重载了OnNcDestroy函数,要么你调用基类的方法,要么你自己delete this;  其它你就尽管 new 去吧
      

  14.   

    需不需要释放,调试一遍看看有无内存泄漏,有的话,就需要自己试用delete,
    1,在不在使用它的时候delete
    2,如果一直要用在CMainFrame::OnDestroy或其它地方delete。
      

  15.   

    多谢大家回复!
    1。在CMainFrame中释放,我觉得不行。首先,在这个函数中肯定是不能Delete了。那只有在OnDestroy或析构函数中释放,但是你程序都关闭了。释放就没有什么意义了吧?本来程序关了,就会释放的吧??还有就是,程序执行过程中,void CMainFrame::OnInputUnit() 函数肯定会被关了,又被调用。这样重复!所以我觉得应该在关闭FormView的时候Delete。2。在RachildFrame,CInputCertView的OnNcDestroy()中delete this;程序都会被中断3。内存泄漏是有的(好像只在第一次New的时候会有,以后再调用这函数不会有内存开销增加。但是,程序中有很多菜单,都调用类似的代码,就会有比较多的内存泄漏了!)。我在很多能想到的地方试过Delete this,都不行
      

  16.   

    void CMainFrame::OnInputUnit() 
    {
        // TODO: Add your command handler code here
        m_currentwin=1;//录入
        if(m_pInput!=NULL)
        {
            m_pInput->MDIActivate();
            return;
        }
        else
        {
        m_pInput=new CRaChildFrame();
        CCreateContext context;
        context.m_pNewViewClass=RUNTIME_CLASS(CInputCertView);
        if(!m_pInput->LoadFrame(IDI_ICON3,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
    {
    delete m_pInput;
            return;
    }
        m_pInput->ShowWindow(SW_SHOWMAXIMIZED);
        m_pInput->InitialUpdateFrame(NULL,true);
    delete m_pInput;
        }
        
    }
      

  17.   

    if(m_pInput!=NULL)
        {
            m_pInput->MDIActivate();
            return;
        }只会new一次啊
    很正常啊
    不用delete
    除非什么时候你再也不要了,可以没事delete掉玩玩