首页
社区
课程
招聘
[求助]请教一个关于对话框的问题
发表于: 2009-4-3 18:11 4170

[求助]请教一个关于对话框的问题

2009-4-3 18:11
4170
是北极星2003老大的《Windows编程循序渐进》中的关于用MFC实现非模态对话框的代码,我的问题是下面两段代码有什么本质区别?

1、书中的源码

 CMyNoModalDialog* pDlg=new CMyNoModalDialog();//CMyNoModalDialog继承CDialog类
  pDlg->Create(IDD_NOMODAL_DIALOG,this);
  pDlg->ShowWindow(SW_SHOW);


2、我尝试的代码

  CMyNoModalDialog dlg;
  dlg.Create(IDD_NOMODAL_DIALOG,this);
  dlg.ShowWindow(SW_SHOW);


1运行正常,但2编译链接都能通过,但运行时对话框一闪即逝。请问各位高手,这是什么原因呢。用new建立和直接定义变量有什么本质的区别?

在下才刚刚学windows编程,还是很菜的鸟,请各位解释得基础点,或者提供下看什么资料能弄明白这个问题也好。

谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
new出来的对象只要没有用delete删除就算过程函数退出不会消失(不过这样做如果没有管理好会造成内存泄漏)。而你在过程函数里定义的对象只要过程函数退出就会消毁对象。
2009-4-3 18:26
0
雪    币: 240
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先谢谢斑竹的热心回复。
那就又有一个新问题了,北极星2003老大的这段代码岂不是必然会内存泄露?

void CFirstSoftwareDlg::OnBnClickedNomodalDialog()
{
  CMyNoModalDialog* pDlg=new CMyNoModalDialog();
  pDlg->Create(IDD_NOMODAL_DIALOG,this);
  pDlg->ShowWindow(SW_SHOW);
  
}


在函数CFirstSoftwareDlg::OnBnClickedNomodalDialog()结束后,指针pDlg作为局部变量,就不复存在了,用new建立的CMyNoModalDialog再也无法引用,自然也无从delete。
2009-4-3 18:39
0
雪    币: 240
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶起,希望能有人解惑。
2009-4-3 20:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
没错,这样做是会引起内存泄漏。
一般的解决方法是将pDlg定义在自己的窗口类中或在全局变量中,在窗口退出后delete删除释放。
2009-4-3 21:10
0
雪    币: 240
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
再次感谢小虾版主!
2009-4-4 14:32
0
游客
登录 | 注册 方可回帖
返回
//