2010-02-23 40 views
1

我需要在stl向量中存储一个类型为bstr的VARIANT。我不知道我应该如何将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?

谢谢

+0

你是什么意思“这个实现是否导致内存泄漏?”据我所知,您存储VARIANT的方式没问题。 – 2010-02-23 11:18:42

+0

我认为VARIANT的副本存储在向量中。然后SysAllocString()导致内存泄漏,因为我没有修改我的原始对象。但我不确定。这就是为什么我需要帮助。 – Nimo 2010-02-23 11:25:21

回答

5

是的,你正在泄漏记忆。

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

你有几个用于固定它的选项:

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

  • 完成后请拨打vec_MyVec中的每个字符串SysFreeString。这样更有效,但也更容易出错,难以正确执行,特别是在考虑异常安全性时。

  • 存储一个向量std::tr1::shared_ptr<CComVariant>,这将防止创建临时副本,但是您将拥有引用计数的开销。