如何存储VARIANT

Nim*_*imo 1 c++ windows com

我需要在stl向量中存储一个类型为bstr的VARIANT.我不确定如何在矢量中存储VARIANT类型.

vector<VARIANT> vec_MyVec;

    VARIANT var_Temp;
    VariantInit(&var_Temp);
    var_Temp.vt = VT_BSTR
    var_Temp.bstrVal = SysAllocString("Test");

vec_MyVec.push_back(var_Temp);
Run Code Online (Sandbox Code Playgroud)

此实现是否会导致内存泄漏?存储VARIANTS的最佳方法是什么?

谢谢

Joe*_*oeG 5

是的,你在泄漏记忆.

无论何时与SysAllocString家人分配内存,都必须将其释放SysFreeString或将其传递给负责释放内存的内容.VARIANT类型不会清理自己的内存.

你有几个修复方法:

  • 使用CComVariantvariant_t.它提供了一个operator =,copy构造函数和一个为您管理内存的析构函数.将它们存储在向量中的缺点是会创建和销毁临时副本(就像存储std :: string一样).这是最简单的,也是我首选的解决方案.

  • 完成后调用SysFreeString每个字符串vec_MyVec.这样更有效但更容易出错并且难以正确执行,尤其是在考虑异常安全时.

  • 存储一个向量std::tr1::shared_ptr<CComVariant>,这将阻止创建临时副本,但您将获得引用计数的开销.