是否还有其他地方?比如CTPPipeLine没有释放资源?

解决方案 »

  1.   

    我不能在CreatePipeLineArray()
    中delete ;因为创建以后要用!!!!
      

  2.   

    void CTPRelationView::CreatePipeLineArray()
    {
      CTypedPtrList<CObList,CTPPipeLine*> &List = pDoc->m_pPipeLine ;
      m_pPipeLineList = &List ;
      for( int i = 0 ; i < 10 ; i ++ )
     { 
       CTPPipeLine* pPipeLineItem = new CTPPipeLine();
       pPipeLineItem->nID = i ;
       m_pPipeLineList->AddTail( pPipeLineItem );
     }
    }
    函数有问题,因为List变量的生命周期是在函数内,所以这儿是直接导致在函数DeleteContents()中释放不掉的原因!这儿可以使用m_pPipeLineList = new CTypedPtrList<CObList,CTPPipeLine*>;或者把m_pPipeLineList声明成CTypedPtrList<CObList,CTPPipeLine*>类型变量而非CTypedPtrList<CObList,CTPPipeLine*>*指针类型变量!
      

  3.   

    //typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
    //CMyList ml;while (!ml.IsEmpty())
    {
       delete ml.GetHead();
       ml.RemoveHead();
    }
      

  4.   

    其实是这样的:::
    .h文件
    class CTPRelationView : public CView
    {
    public:
     CTypedPtrList<CObList,CTPPipeLine*> *m_pPipeLineList;
     void OnExplodeplAnalyze();
     void CreatePipeLineArray();
    }
    .cpp文件void CTPRelationView::CreatePipeLineArray()
    {
      for( int i = 0 ; i < 10 ; i ++ )
     { 
       CTPPipeLine* pPipeLineItem = new CTPPipeLine();
       pPipeLineItem->nID = i ;
       m_pPipeLineList->AddTail( pPipeLineItem );
     }
    }
    void CTPRelationView::OnExplodeplAnalyze() 
    {
      // TODO: Add your command handler code here
      CTPRelationDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      CTypedPtrList<CObList,CTPPipeLine*> &List = pDoc->m_pPipeLine ;
      m_pPipeLineList = &List ;
      CreatePipeLineArray();
    }
    void CTPRelationDoc::DeleteContents() 
    {
       while( !m_pPipeLine.IsEmpty() )
      {
    delete m_pPipeLine.RemoveHead() ;
      }
      CDocument::DeleteContents();
    }
    为什么还有内存泄漏?????
      

  5.   

    CTypedPtrList<CObList,CTPPipeLine*> &List = pDoc->m_pPipeLine ;
      m_pPipeLineList = &List ;这个地方似乎有点问题。
      

  6.   

    CTypedPtrList<CObList,CTPPipeLine*> &List 
    仅仅是用来转化用的!!!
      

  7.   

    CTypedPtrList<CObList,CTPPipeLine*> &List = pDoc->m_pPipeLine ;
      m_pPipeLineList = &List ;这个地方似乎有点问题。那请问该如何解决呢???
      

  8.   


      for( int i = 0 ; i < 10 ; i ++ )
     { 
     CTPPipeLine* pPipeLineItem = new CTPPipeLine(); //new CTPPipeLine; 
      pPipeLineItem->nID = i ;
      m_pPipeLineList->AddTail( pPipeLineItem );
     }
      

  9.   

    啊哟,大家多多参与!!!那么,请问在视中生成的对象,能否在文档中delete ????
      

  10.   

    由于声明是指针
    CTypedPtrList<CObList,CTPPipeLine*> *m_pPipeLineList;
    必须使用delete来释放:
    delete m_pPipeLineList;