MFC中的内存释放问题!

elvee 2009-04-29 01:18:18
针对MFC中的内存释放有很多疑惑,例如下面的这段代码:

CMFCRibbonButton *rbOpen=new CMFCRibbonButton(ID_FILE_OPEN, _T("Open"), -1, 0);
pRibbonPan->Add(rbOpen);

//delete rbOpen;
这里的rbOpen指针指向的对象用不用释放呢?如果释放是用delete rbOpen吗?
但是我用delete rbOpen;后程序会出现错误,这是怎么回事呀?

请大家多指点!!!谢谢!!
...全文
438 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihuo100 2012-10-22
  • 打赏
  • 举报
回复
malloc分配的内存怎么释放呢?
ps:在静态库中使用MFC
elvee 2009-04-30
  • 打赏
  • 举报
回复
楼上说的也许有道理,我看了MFC自动产生的void CMainFrame::InitializeRibbon()方法中,定义的如下指针:
CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);

在该方法的最后,也没有将pBtnPrint释放掉。不知道怎么回事,只能再查查相关资料了。
EddieCai 2009-04-29
  • 打赏
  • 举报
回复
可能不用手工释放,也许pRibbonPan被释放时会自动释放所有被Add进去过的CMFCRibbonButton 对象。只是猜测而已,具体要看参考文档是怎么说的。
fightforfuture 2009-04-29
  • 打赏
  • 举报
回复
CMFCRibbonButton是哪里来的类,
可以参考文档,
elvee 2009-04-29
  • 打赏
  • 举报
回复
如果在别的地方有调用,那应该在哪删除它呢? 不能每新建一个对象,然后都再查找一下它在哪调用吧?这些不太懂,能说的详细些吗?
CMFCRibbonCategory *pRibbonCate=m_wndRibbonBar.AddCategory (_T("Ribbon UI Category"), IDB_WRITESMALL,
IDB_WRITELARGE);

像这一句中的pRibbonCate指针是不是就不用释放了呀?
wutaihua 2009-04-29
  • 打赏
  • 举报
回复
报错的时候看看堆栈,应该会停留在调用的函数那。
wutaihua 2009-04-29
  • 打赏
  • 举报
回复
rbOpen 应该被删除,但是删除后要确认其他的地方没有再次调用,另外指针要置空。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧