求问CMainFrame中的DestroyWindow函数执行完后,CMainFrame的对象指针是否变为NULL?
我测试的没有变成NULL,MSDN里面说CMainFrame执行完这个函数后会自动delete其指针.但是指针并没有变为NULL,请问这是怎么回事啊?应该怎么去改变这个指针为NULL呢?

解决方案 »

  1.   

    楼主说说你为什么要这么做先。试想,如果有段代码在你不知道的情况下,保存了指向mainframe的指针,你怎么去将其置为null呢?
      

  2.   

    这个是肯定的。
    LZ可以做这样的测试:在程序中CDialog * pDlg = new CDialog();
    delete pDlg;
    if (NULL == pDlg)
    {
       AfxMessageBox("指针为空");
    }
    else
    {
      AfxMessageBox("指针不为空");
    }
    MainFrm也是对话框,所以没有什么特别的。
      

  3.   

    不会,DestroyWindow只是销了窗口,CMainFrame是一个对象指针,不可能会变为NULL
      

  4.   

    这个是肯定的。特别说明:一定不会置为NULL,也就是说弹出的对话框是AfxMessageBox("指针不为空");
      

  5.   

    其实CMainFrame中的DestroyWindow函数执行完后只是完成了
    窗口的销毁,框架对象还没有销毁。
    真正销毁框架对象的是在PostNcDestroy中
    void CMainFrame::PostNcDestroy() 
    {
            // TODO: Add your specialized code here and/or call the base class

    CFrameWnd::PostNcDestroy();//这个函数的执行代码就是 delete this 
                                       //LZ可以在这里单步跟踪一下,相信就明白了                                   
    }
    CMainFrame执行完这个函数后会自动delete其指针,其实是一系列的动作
    DestroyWindow结束后又会调用PostNcDestroy
      

  6.   

    delete指针以后指针不是变NULL
    我测试这段代码:
    CDialog * pDlg = new CDialog();
    delete pDlg;
    if (NULL == pDlg)
    {
       AfxMessageBox("指针为空");
    }
    else
    {
      AfxMessageBox("指针不为空");
    }指针还是原来的地址,可是hwnd变化了,由原来的0x00000000变成了0xfeeefeee
    我怎么判断指针是否被delete了呢?
    我现在做一个打印的程序。我在一单文档中弹出模态对话框,然后进行打印预览。我这里创建了新的CPrintFrame和CPrintView,这里我能调用单文档的打印预览的功能?我试了好象不行,可能是模态对话框的缘故。
    我想响应对话框的OnDestory,在这里判断CPrintFrame的指针是否存在,如果存在则关闭CPrintFrame,如果不存在,则不处理。假如我CPrintFrame打印预览窗体关闭了。这时我怎么去判断呢?或者我没有打开打印预览窗体这时的CPrintFrame又是什么样子呢?
      

  7.   

    假如我CPrintFrame打印预览窗体关闭了。这时我怎么去判断呢?
    ----------
    响应关闭消息啊。WM_CLOSE。我没有打开打印预览窗体这时的CPrintFrame又是什么样子呢?
    ----------
    既然打开也是你程序做的,打没打开你设个标志不就结了。
      

  8.   

    delete 了要浮空delete ptr;ptr = NULL;不然 
    if ( ptr != NULL ) //是起不到检测作用的
      

  9.   

    删除之后,直接赋值为NULL,否则会出现也指针。CDialog * pDlg = new CDialog();
    delete pDlg;
    pDlg = NULL;