Мое приложение MFC с смешанным режимом создает ложные утечки памяти, потому что у CRT нет времени для закрытия, прежде чем выключение MFC dll будет закрыто.
У меня очень простое небольшое приложение, которое показывает проблему:
#include <windows.h>
#include <iostream>
struct LongTimeToDestroy
{
~LongTimeToDestroy()
{
std::cout << "Will get called!" << std::endl;
Sleep(3000);
std::cout << "Won't get called!" << std::endl;
}
};
LongTimeToDestroy gJamsUpTheCRT;
int main()
{
}
Скомпилируйте с помощью cl.exe /clr test.cpp
. При запуске вы получаете:
Will get called!
Суть проблемы: любые статические/глобальные переменные, объявленные до gJamsUpTheCRT
, не будут освобождены. Например, в моем случае класс MFC CWinApp не очищается.
Является ли это ожидаемым поведением? Я хочу, чтобы приложение полностью отключилось.
Спасибо,