请教:    我在一个SDI程序的CMainFrame中:
    CView*    pViewNewAdd = new CMyOwnView; //CMyOwnView is CListView 
                                            //or CFormView,etc;
    pViewNewAdd->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,
                     this,AFX_IDW_PANE_FIRST+dstViewId,NULL);    pDoc->AddView(pViewNewAdd);
    pDoc->RemoveView(pViewOld);
    ......       该new出来的指针我需要保存到MainFrame结束,
    可结束时我无论在哪里delete之都出错,而我不delete之却没有报告内存泄漏。
    
    该指针应该如何正确释放?

解决方案 »

  1.   

    你调试一下MFC的代码,你会发现MFC在为doc新建view时做了很多工作,你最好通过激活MFC这些代码来实现你的功能,否则会产生一些麻烦。
      

  2.   

    这主要是CWnd::PostNcDestroy()起作用.这是一个虚函数.当窗口被destroy之后,由框架自动调用. 只要你看一下MFC中CView::PostNcDestroy()源代码,就会发现它有一句:
    delete this;
    所以,当你的view窗口destroy之后(这里说的是window窗口的destroy,你的C++对象并不有因此而销毁),C++被销毁.这就是你不用在其他地方显示的delete的原因.简言之,如果一个CWnd的派生类重载了PostNcDestroy(),并且在其中加了一句: delete this;
    那么这个CWnd对象就不再需要你delete了,否则,你要保存该对象的指针,在适当时候delete它.