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