一个COM内存泄露的例子。
VARIANT var;
VariantInit(&var);
var.vt=VT_BSTR;
var.bstrVal=::SysAllocString("2222"); /*这边内存将泄露*/
VariantClear(var);
必须使用
SysFreeString(var.bstrVal);
VariantClear(var);
对于这种泄露,VC IDE将无能为力,因为它只擅长NEW和Delete的匹配。
还有一点建议,在能够使用ATL包装类或者C++包装类的时候 ,请尽量使用它们。让它们来管理你的BSTR和VARIANT变量的申请和释放。
因为在编写的过程,如果写的代码一多,很容易把变量的释放给忘了。对于这种情况,又是很难查找的问题的根源。