我正在使用一个内存验证程序,该程序报告程序终止时仍在使用的句柄。我将其范围缩小到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;
}
我想知道代码干净无泄漏。我真的很好奇CFile
和CStdioFile
为何会有不同的表现。