我是MFC的新手,并提出这两个片段。他们看起来不一样,但两者都有效,我只是不明白为什么? 帮助。非常感谢。
//代码段1
BOOL CMainApp::InitInstance()
{
CMainFrame *wnd = new CMainFrame();
m_pMainWnd = wnd;
wnd->ShowWindow(SW_SHOW);
wnd->UpdateWindow();
return true;
}
//代码段2
BOOL CMainApp::InitInstance()
{
CMainFrame wnd;
wnd.ShowWindow(SW_SHOW);
wnd.UpdateWindow();
return true;
}
答案 0 :(得分:0)
对我来说,主要区别在于,在第一种情况下,您为CMainFrame动态分配内存,而在第二种情况下,您似乎将该对象创建为局部变量。
我很惊讶第二种情况没有崩溃,因为 wnd 在 InitInstance 完成执行时被销毁。
在第一个片段中,您将此窗口保留在已分配的内存中,该内容似乎保留在 m_pMainWnd 属性:m_pMainWnd。在leat中,新窗口在InitInstance结束时不会被销毁。
答案 1 :(得分:0)
这只是静态分配的对象和动态分配的对象之间的区别,以及指针的工作方式。
您的第一个代码段动态分配一个新的CMainFrame
对象,该对象是默认构造的。它在内存中的地址存储在指针wnd
中,然后存储在成员变量m_pMainWnd
中。然后,您在ShowWindow
指向的对象上调用UpdateWindow
和wnd
在代码段2中,您静态地为函数本地分配一个CMainFrame
对象,然后在该对象上调用ShowWindow
和UpdateWindow
。
请注意,虽然存在差异,但在第一个代码段中,CMainFrame
对象存在于函数末尾之外;在第二个中,它在函数返回时被销毁。