不具备自动清除功能的窗口类 释放 (在网上看到 摘过来 哈哈)

 不具备自动清除功能的窗口类,一般在堆栈中创建或嵌入于其它c++对象中:

  所有标准的Windows控件类(如CStatic, CEdit, CListBox等等)

  由CWnd类直接派生出来的子窗口对象(如用户定制的控件)

  拆分窗口类(CSplitterWnd)

  缺省的控制条类(CControlBar的派生类)

  对话框类(CDialog)在堆栈上创建的模态对话框类

  所有的Windows通用对话框(除CFindReplaceDialog)

  由ClassWizard创建的对话框

  具有自动清除功能的窗口类,一般在堆中创建:

  主框架窗口类(直接或间接从CFrameWnd类派生)

  视图类(直接或间接从CView类派生)

  从某种程度上来说,MFC的"服务到家"使初学者有些找不着北.不过,不得不承认:MFC干的很漂亮!

  谈到这里,我们应该明白c++里一条重要的准则:用DestroyWindow清除窗口对象,不要用"delete".

  对于不具备自动清除功能的窗口类使用"delete"时,"delete"先调用析构函数里的DestroyWindow,由于在析构函数中,虚机制不起作用,这里只能调用本地版本(Cwnd类)DestroyWindow函数,显然这不是我们想要的.对于有自动清除功能的窗口类,好象问题更严重一点,前面提到了重载的PostNcDestroy已经含有了"delete this",这样c++对象就被释放了两次

你可能感兴趣的:(C++学习笔记)