我是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指向的对象上调用UpdateWindowwnd

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

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

10-08 07:36