Я использую программу проверки памяти, которая сообщает о дескрипторах, оставшихся в использовании при завершении программы. Я сузил это до CStdioFile
звонков. Похоже, что любые CStdioFile
, открытые в InitInstance
или в диалоговом окне главного окна OnInitDialog
в приложении Dialog, оставляют маркеры, лежащие вокруг.
Это скорее любопытство, чем проблема, но я бы хотел понять это, если это проблема, и я неправильно ее понимаю.
Итак, я взял небольшое приложение (здесь показано 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
ведут себя по-разному.