我有一个MFC项目,即链接到第三方DLL.在程序退出时,IDE报告"检测到的内存泄漏!" 并倾倒泄漏.
这些泄漏来自第三方DLL.我很确定这些都被错误地报道了.(快速Google检查表明,在CRT销毁文件范围内的变量之前,MFC会检查内存泄漏.)
有没有办法禁用内存泄漏检查,只有该DLL?
回应到目前为止发布的答案
我不认为我滥用了API.我怀疑的行为可以用一个简单的项目来复制
使用VS2005
创建新的解决方案.
创建一个新项目(MFC应用程序.)
创建一个新项目(Windows 32项目,应用程序类型:DLL,导出符号)
在dll项目中,导出一个函数.
在dll项目中,按如下方式定义类Foo
这是代码
class foo { public: foo(void) { p = new int; }; ~foo(void) { delete p; } private: int* p; };
在dll项目中,创建类foo的实例,在文件级别作用域.
foo g_foo; // This is an example of an exported function. TEMPDLL_API int exportedFunction(void) { return 42; }
在MFC项目中,链接到库,并在InitInstance()中调用导出的函数
运行应用程序时,即使p被删除,也会在调用g_foo的析构函数时报告内存泄漏.
找到了我想要的东西.
在项目属性对话框中的"链接器"下 输入
将dll指定为Delay Loaded DLL.
一旦我这样做,Visual Studio不再报告任何内存泄漏.
那些泄漏是合法的.我会仔细检查DLL文档,以确保您没有错过对特定于DLL的清理函数的调用.