我有一个MFC应用程序,它包含一个主应用程序和许多MFC扩展DLL。它还具有包含所有资源的扩展资源DLL。我注意到应用程序没有报告内存泄漏,因为MFC应用程序通常会在我发生内存泄漏时执行此操作。我遍历了所有内容,发现MFC内存泄漏报告机制是通过类_AFX_DEBUG_STATE。与基于标准向导的MFX应用程序相比,我在dumpinit.cpp中实例化了一个_AFX_DEBUG_STATE对象:
static BOOL _afxDiagnosticInit = AfxDiagnosticInit();
基本上,内存泄漏报告机制的初始化在我的应用程序和向导生成的MFC应用程序中是相同的。
有一个名为afxDebugState的静态对象,定义为:
extern CProcessLocal<_AFX_DEBUG_STATE> afxDebugState;
创建时的调用堆栈是:
mfc120ud.dll!_AFX_DEBUG_STATE::_AFX_DEBUG_STATE() Line 109 C++
mfc120ud.dll!CProcessLocal<_AFX_DEBUG_STATE>::CreateObject() Line 229 C++
mfc120ud.dll!CProcessLocalObject::GetData(CNoTrackObject * (void) * pfnCreateObject) Line 462 C++
mfc120ud.dll!CProcessLocal<_AFX_DEBUG_STATE>::GetData() Line 215 C++
mfc120ud.dll!AfxDiagnosticInit() Line 135 C++
mfc120ud.dll!`dynamic initializer for '_afxDiagnosticInit''() Line 20 C++
msvcr120d.dll!_initterm(void (void) * * pfbegin, void (void) * * pfend) Line 955 C
mfc120ud.dll!_CRT_INIT(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 295 C
mfc120ud.dll!__DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 502 C
mfc120ud.dll!_DllMainCRTStartup(void * hDllHandle, unsigned long dwReason, void * lpreserved) Line 472 C
然而,对象的析构函数在向导应用程序中调用,但从不在我的应用程序中,因此我没有内存泄漏转储机制。
有人可以解释那个吗?
由于