请教一个new Dialog的问题

yatuor 2003-03-05 08:33:58
在vc中,建一个对话框模板,然后建立对话框类,如CTestDlg
然后找个地方(比如按钮的响应函数)写如下代码:
CTestDlg dlg=new CTestDlg();
dlg.DoModal();
可能大家一眼能看出这是错的,应该是
CTestDlg *dlg=new CTestDlg();
dlg->DoModal();
不过请大家去试一下,上面两种,还有
CTestDlg dlg;
dlg.DoModal();
三种都是对的。
我想请教一下,这是怎么回事?第一种为什么编译能通过,而且运行良好。
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yatuor 2003-03-24
  • 打赏
  • 举报
回复
richmain is right,the score belongs to you.
thank you.
I guess it maybe do like richmain say,but I am lazy to look up msdn.
your explanation is reasonable.
SatanLi1982 2003-03-06
  • 打赏
  • 举报
回复
不知到richmain(吕起民) 说的什么?

这个问题我也遇到过,很有趣我还看见这样的远原代码:
CDialog dlgPra;
..........
delete dlgPra;

我估计是:
dlg->DoModal();
dlg.DoModal();
都行是因为与C兼容。

而CTestDlg *dlg=new CTestDlg();
CTestDlg dlg=new CTestDlg();
能行就要看一看CDialog的MFC原代码了。
我估计是因为dialog是一种资源的缘故。
blackcorbie 2003-03-06
  • 打赏
  • 举报
回复
不明白,很想明白!关注!!
三种情况运行是不是同样的效果?
SatanLi1982 2003-03-06
  • 打赏
  • 举报
回复
还有种解释:
CTestDlg *dlg=new CTestDlg();
只是把new得到的地址返回给指针dlg。

CTestDlg dlg=new CTestDlg();
却是调用了CTestDlg的constructor,把new出来的CTestDlg对象作为初始值付给dlg,这就要视CTestDlg的constructor而定了,但毫无疑问,这样写有内存泄露。
richmain 2003-03-05
  • 打赏
  • 举报
回复
如果兄弟将信誉,就把分给我吧?
richmain 2003-03-05
  • 打赏
  • 举报
回复
兄弟这是90年的知识,标准C++语法。
class CTest
{
public:
CTest(int p){
int n = p;
ASSERT(n != 2);
};
virtual ~CTest(){};

};

CTest test = 2;
demetry 2003-03-05
  • 打赏
  • 举报
回复
^_^

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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