CWnd的Create成员函数创建的,而由CWnd的虚拟析构函数销毁。DestroyWindow函数销毁Windows的窗口,但是不销毁对象

解决方案 »

  1.   

    如果窗口对象是new出来的,就用delete销毁。
    如果直接定义窗口对象,不需要销毁,系统自动释放。
      

  2.   

    你自己已经给自己答案了!DestroyWindow函数里面销毁窗体的同事也能delete掉自己new出来的内存.
      

  3.   

    对象和窗口是2回事,对象有个成员m_hWnd保存了与之关联的窗口句柄,DestroyWindow只是销毁了窗口,并不会delete对象本身,因此如果new一个窗口对象,调用其create创建一个窗口,结束时用DestroyWindow销毁窗口,然后可在PostNcDestroy里delete掉这个指针(delete this),个人理解说错了楼下斧正。
      

  4.   

    说得很好!补充一下:当调用DestroyWindow时,DestroyWindow函数里边会先后发送 WM_DESTROY和WM_NCDESTROY消息,移除并释放所有与窗口相关的资源(例如菜单、定时器等等)。假如指定窗口是一个父窗口或者所有者窗口,DestroyWindow 会自动销毁其所关联的子窗口或所有者窗口。在WM_DESTROY销毁子窗口(这里假如有的话,释放子窗口所关联的所有内存)后,WM_NCDESTROY再销毁整个非客户区窗口。窗口虽然没有了,但是只要不delete CWnd或者到了CWnd的析构,CWnd是一直存在的。
      

  5.   

    系统delete this 还是自己在函数上delete
      

  6.   

    自己new的一定要自己delete,除非用了智能指针。。或者预定一大块内存,new了后直接把那一大块内存释放掉。
    不过跟这没关系,这里当然要自己delete,3L我连在哪里delete都说了。
      

  7.   

    当然也不是所有的都要在那里去delete,看情况,有时可以在其父窗口的析构函数里delete
      

  8.   

    你的CWnd对象是在堆上构造的吗?如果不是,就不需要delete