我是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;
}
最佳答案
这只是静态分配的对象和动态分配的对象之间的区别,以及指针的工作方式。
您的第一个代码段动态分配了一个新的CMainFrame
对象,该对象是默认构造的。它在内存中的地址存储在指针wnd
中,然后存储在成员变量m_pMainWnd
中。然后,在ShowWindow
指向的对象上调用UpdateWindow
和wnd
在第二段中,您静态分配了函数本地的CMainFrame
对象,然后在该对象上调用ShowWindow
和UpdateWindow
。
请注意,这是有区别的-在第一个代码段中,CMainFrame
对象存在于函数末尾之外。在第二个中,函数返回时销毁它。