针对MFC中的内存释放有很多疑惑,例如下面的这段代码:        CMFCRibbonButton *rbOpen=new CMFCRibbonButton(ID_FILE_OPEN, _T("Open"), -1, 0);
        pRibbonPan->Add(rbOpen);        //delete rbOpen;
这里的rbOpen指针指向的对象用不用释放呢?如果释放是用delete rbOpen吗?
但是我用delete rbOpen;后程序会出现错误,这是怎么回事呀?请大家多指点!!!谢谢!!

解决方案 »

  1.   

    rbOpen 应该被删除,但是删除后要确认其他的地方没有再次调用,另外指针要置空。
      

  2.   

    如果在别的地方有调用,那应该在哪删除它呢?  不能每新建一个对象,然后都再查找一下它在哪调用吧?这些不太懂,能说的详细些吗?
    CMFCRibbonCategory *pRibbonCate=m_wndRibbonBar.AddCategory (_T("Ribbon UI Category"), IDB_WRITESMALL,
    IDB_WRITELARGE);像这一句中的pRibbonCate指针是不是就不用释放了呀?
      

  3.   

    CMFCRibbonButton是哪里来的类,
    可以参考文档,
      

  4.   

    可能不用手工释放,也许pRibbonPan被释放时会自动释放所有被Add进去过的CMFCRibbonButton 对象。只是猜测而已,具体要看参考文档是怎么说的。
      

  5.   

    楼上说的也许有道理,我看了MFC自动产生的void CMainFrame::InitializeRibbon()方法中,定义的如下指针:
    CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);在该方法的最后,也没有将pBtnPrint释放掉。不知道怎么回事,只能再查查相关资料了。
      

  6.   

    malloc分配的内存怎么释放呢?
    ps:在静态库中使用MFC