我需要在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的最佳方式?
谢谢
答案 0 :(得分:5)
是的,你正在泄露记忆。
每当您使用SysAllocString
系列分配内存时,您必须使用SysFreeString
释放内存或将其传递给负责释放内存的内容。 VARIANT类型不会清理自己的内存。
您有几种方法可以解决它:
使用CComVariant
或variant_t
。它提供了一个operator =,copy构造函数和一个为您管理内存的析构函数。将它们存储在向量中的缺点是会创建和销毁临时副本(就像存储std :: string一样)。这是最简单的,也是我首选的解决方案。
完成后,在SysFreeString
中的每个字符串上调用vec_MyVec
。这样更有效,但也更容易出错并且难以正确执行,尤其是在考虑异常安全时。
存储std::tr1::shared_ptr<CComVariant>
的向量,这样可以防止创建临时副本,但您将获得引用计数的开销。