在菜单旁边加上一个图标,这两段代码有什么不同吗?应该是一样的啊~~~

orangetouch 2002-03-13 01:52:12
段一:
CBitmap *bmp=new CBitmap();
bmp->LoadBitmap (IDB_BITMAP1);
GetParent()->GetMenu ()->SetMenuItemBitmaps (ID_MENUITEM32771,MF_BYCOMMAND,bmp,bmp);

段二:
CBitmap bmp;
bmp.LoadBitmap (IDB_BITMAP1);
GetParent()->GetMenu ()->SetMenuItemBitmaps (ID_MENUITEM32771,MF_BYCOMMAND,&bmp,&bmp);

中有第一和第三句有一点着别,为什么第一段代码可以在菜单旁边加上图标第二段就不行呢?

...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanjiang 2002-03-13
  • 打赏
  • 举报
回复
不一样:
CBitmap *bmp=new CBitmap();
bmp将在堆中存在,即使过程结束也不被销毁,可以照bmp地址访问.
CBitmap bmp;
过程结束bmp即被销毁.
mahongxi 2002-03-13
  • 打赏
  • 举报
回复
第一段代码的CBitmap类对象是在堆内分配的空间,所以除非你DELETE否则它不会消失,而第二段,你可能把它分配在栈内,这样当你执行到函数未端,会自动清栈,
你可以在第二段代码getparent()...后一行加入bmp.Detach(); 不过我不知道可不可行.
mahongxi 2002-03-13
  • 打赏
  • 举报
回复
当然了,第一段代码中CBitmap类对象是在堆内分配的,除非你Delete它,否则它不会自动消失,而段二中的 CBitmap类对象如果你是在栈内分配的,当然代码到Out OF your Function时,会自动清栈,你可以试试在段二后加上:
bmp.Detach(); 我没试过,不一定可行。
sanjiang 2002-03-13
  • 打赏
  • 举报
回复
当然有区别了.
第一句:bmp建立在堆上,过程结束而bmp仍然在内存中存在且能被访问到.
第二局:bmp建立在堆栈上,过程结束便销毁bmp对象.

16,551

社区成员

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

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

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