繁体   English   中英

接下来的两个摘要有什么区别?

[英]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 然后,您调用ShowWindowUpdateWindow对象通过指向wnd

在第二段中,您静态分配了函数本地的CMainFrame对象,然后在该对象上调用ShowWindowUpdateWindow

但是请注意,这是有区别的-在第一个代码段中, CMainFrame对象存在于函数末尾之外。 在第二个中,函数返回时销毁它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM