CStdioFile句柄泄漏

时间:2019-07-02 22:45:15

标签: c++ mfc

我正在使用一个内存验证程序,该程序报告程序终止时仍在使用的句柄。我将其范围缩小到CStdioFile个电话。似乎在CStdioFile或Dialog应用程序的主窗口对话框的InitInstance中打开的任何OnInitDialog,都应留有句柄。

这更多地是好奇心而不是问题,但是我想理解它,以防万一它是一个问题并且我解释错了。

因此,我使用了一个小应用程序(此处显示InitInstance),并放入了一些代码对其进行测试,并且确实,我遇到了句柄泄漏。如果我将CStdioFile更改为CFile并打开文件,则不会报告泄漏。

我把开口放在括号内,看它使用后是否能销毁。我尝试专门关闭该文件,但无济于事。

BOOL CMyApp::InitInstance()
{
    AfxEnableControlContainer();

    {
    CStdioFile fFile;  // Change to a CFile to get no leaks.
    fFile.Open("mytestfile.txt", CFile::modeRead);
    }


    // Standard initialization
    // If you are not using these features and wish to reduce the size
    //  of your final executable, you should remove from the following
    //  the specific initialization routines you do not need.

#ifdef _AFXDLL
    //Enable3dControls();           // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();   // Call this when linking to MFC statically
#endif

    CMyDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {

    }
    else if (nResponse == IDCANCEL)
    {

    }

    // Since the dialog has been closed, return FALSE so that we exit the
    //  application, rather than start the application's message pump.
    return FALSE;
}

我想知道代码干净无泄漏。我真的很好奇CFileCStdioFile为何会有不同的表现。

0 个答案:

没有答案