前情提要:最近调用com接口,用了很多的BSTR和VARIANT(因为com接口参数需要),后来发现内存泄露有点严重
怀疑是调用了这个两个类型的原因
1、BSTR a;
调用微软的com接口,传入参数a得到了值,之后,是否需要自己释放a呢,如果释放,用SysFreeString?
可是我没调用SysAllocString?,2、VARIANT b;
如果我不调用VariantClear(&b);出了作用域后,b会不会自动释放呢?
怀疑是调用了这个两个类型的原因
1、BSTR a;
调用微软的com接口,传入参数a得到了值,之后,是否需要自己释放a呢,如果释放,用SysFreeString?
可是我没调用SysAllocString?,2、VARIANT b;
如果我不调用VariantClear(&b);出了作用域后,b会不会自动释放呢?
2 b里面保存BSTR SAFEARRAY的话就有问题了
VARIANT中如果是SAFEARRAY的话,需要释放。
其它情况,还是要看实际的接口函数
_bstr_t
用这两个
VARIANT我用过,我的不用释放就可以,关于楼上说的要看实际接口我不太理解。
指向的值有时会自动改变,以至于后来就不敢用了……
通常使用CComVariant/CComBSTR就足够使用了,自动释放内存。