gpt4 book ai didi

c++ - 如何存储 VARIANT

转载 作者:可可西里 更新时间:2023-11-01 11:14:56 25 4
gpt4 key购买 nike

我需要在 STL vector 中存储 bstr 类型的 VARIANT。我不确定我应该如何在 vector 中存储 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 的最佳方式是什么?

谢谢

最佳答案

是的,你正在泄漏内存。

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

您有几个修复它的选项:

  • 使用 CComVariantvariant_t .它提供了一个 operator=、复制构造函数和一个为您管理内存的析构函数。将它们存储在 vector 中的缺点是将创建和销毁临时拷贝(与存储 std::string 相同)。这是最简单的解决方案,也是我的首选。

  • 调用SysFreeStringvec_MyVec 中的每个字符串上当你完成时。这样效率更高,但也更容易出错且难以正确执行,尤其是在考虑异常安全性时。

  • 存储 std::tr1::shared_ptr<CComVariant> 的 vector ,这将阻止创建临时拷贝,但您将承担引用计数的开销。

关于c++ - 如何存储 VARIANT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com