前情提要:最近调用com接口,用了很多的BSTR和VARIANT(因为com接口参数需要),后来发现内存泄露有点严重
怀疑是调用了这个两个类型的原因
1、BSTR a;
 调用微软的com接口,传入参数a得到了值,之后,是否需要自己释放a呢,如果释放,用SysFreeString?
 可是我没调用SysAllocString?,2、VARIANT b;
   如果我不调用VariantClear(&b);出了作用域后,b会不会自动释放呢?

解决方案 »

  1.   

    1 如果参数是BSTR* 的话一般就需要你释放了
    2 b里面保存BSTR SAFEARRAY的话就有问题了
      

  2.   

    BSTR 这个东西使用后一定要用 SysFreeString 这个释放,不然就有内存泄露(数据库操作频繁很严重)VARIANT 不用手动释放, 会自动回收
      

  3.   

    我程序中用了很多BSTR得到库函数返回值,不释放也没有看到有泄露
    VARIANT中如果是SAFEARRAY的话,需要释放。
    其它情况,还是要看实际的接口函数
      

  4.   

    _variant_t
    _bstr_t
    用这两个
      

  5.   

    BSTR 这个类型的变量用完以后一定要用SysFreeString();否则内存泄漏很严重。
    VARIANT我用过,我的不用释放就可以,关于楼上说的要看实际接口我不太理解。
      

  6.   

    之前有用过_bstr_t的,但是这个类型的变量,很是奇怪,调试的时候
    指向的值有时会自动改变,以至于后来就不敢用了……
      

  7.   

    接口调用是需要释放的.不大可能是varent问题
      

  8.   

    一定要释放。_variant_t/_bstr_t通常用于导入库的封装类型,使用这种类型需要引用额外的库。
    通常使用CComVariant/CComBSTR就足够使用了,自动释放内存。