c++ - 接下来的两个片段有什么区别?

标签 c++ mfc

我是 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 .然后调用 ShowWindowUpdateWindowwnd 指向的对象上

在片段二中,您静态分配了一个 CMainFrame函数局部对象,然后调用 ShowWindowUpdateWindow在那个物体上。

请注意,虽然存在差异 - 在第一个片段中 CMainFrame对象存在于函数末尾之外;在第二个中,它在函数返回时被销毁。

关于c++ - 接下来的两个片段有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993553/

相关文章:

c++ - 如何在 vc 2008 或 vc 2010 Beta 中将对话框栏或对话框放入 Pane

c++ - 立即调用 OnMove() 而不是等待窗口的实际移动

c++ - 如何从 QString 中删除尾随空格?

C++ 对齐和数组

c++ - 我如何在渲染 VBO 后才更改纹理坐标?

c++在char的开头插入char

c++ - 奇怪的体素锥体追踪结果

c++ - 如何正确发送 CMFCMenuButton 选择的 ID 到消息映射?

winapi - 以编程方式选择 MFC 单选按钮

c++ - 错误 : 'Failed to specialize function template' C2893 'std::invoke'