混合モードのMFCアプリケーションは、MFC dllがシャットダウンされる前にCRTをシャットダウンする時間がないため、誤ったメモリリークを引き起こしています。
私は問題を示す非常にシンプルな小さなアプリを持っています:
#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
割り当て解除されません。たとえば、私の場合、MFCCWinAppから派生したクラスはクリーンアップされません。
これは予想される動作ですか?アプリを完全にシャットダウンさせたいのですが。
ありがとう、