[英]What's the difference between next two snippets?
我是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动态分配内存,而在第二种情况下,您似乎是在将该对象创建为局部变量。
我很惊讶第二种情况没有崩溃,因为InitInstance完成执行时wnd被破坏了。
在第一个代码段中,将此窗口保留在分配的内存中,该引用似乎保留在m_pMainWnd属性:m_pMainWnd中。 至少,新窗口不会在InitInstance的末尾销毁。
这只是静态分配的对象和动态分配的对象之间的区别,以及指针的工作方式。
您的第一个代码段动态分配了一个默认构造的新CMainFrame
对象。 它在内存中的地址存储在指针wnd
,然后存储在成员变量m_pMainWnd
。 然后,您调用ShowWindow
和UpdateWindow
对象通过指向wnd
在第二段中,您静态分配了函数本地的CMainFrame
对象,然后在该对象上调用ShowWindow
和UpdateWindow
。
但是请注意,这是有区别的-在第一个代码段中, CMainFrame
对象存在于函数末尾之外。 在第二个中,函数返回时销毁它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.