如何存储VARIANT

时间:2010-02-23 11:10:10

标签: 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);

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

谢谢

1 个答案:

答案 0 :(得分:5)

是的,你正在泄露记忆。

每当您使用SysAllocString系列分配内存时,您必须使用SysFreeString释放内存或将其传递给负责释放内存的内容。 VARIANT类型不会清理自己的内存。

您有几种方法可以解决它:

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

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

  • 存储std::tr1::shared_ptr<CComVariant>的向量,这样可以防止创建临时副本,但您将获得引用计数的开销。