gpt4 book ai didi

c++ - 将智能指针分配给 _variant_t 是否需要手动 AddRef()?

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:21 25 4
gpt4 key购买 nike

这是一个示例片段:

_variant_t var;

var.vt = VT_UNKNOWN;

var.punkVal = unknownInterfaceSmartPointer;

unknownInterfaceSmartPointer->AddRef(); // Question Statement

// Setting unknownInterfaceSmartPointer to some other container

这里是否真的需要手动 AddRef?以下将是比这更好的方法:

_variant_t var(unknownInterfaceSmartPointer.GetInterfacePointer());

你的想法?

最佳答案

如果您直接分配给 punkVal 成员(如您的第一个片段),那么您需要一个 AddRef() - 没有人会为您做这件事。更好的方法是使用 _variant_toperator=() 成员:

_variant_t var;
var = unknownInterfaceSmartPointer.GetInterfacePointer();

或者按照你的建议去做——使用转换构造函数:

_variant_t var(unknownInterfaceSmartPointer.GetInterfacePointer());

后两种变体都很好,不需要在您的代码中使用 AddRef() - 它将在 _variant_t 实现中完成。此外,它们是有益的,因为如果您重新分配给相同的变体,该实现将为您进行适当的清理:

_variant_t var;
// if you assign a BSTR or smart pointer here
// you want it to be properly released later
var = whatever1();
// this will do the proper release of the previously
// stored stuff and then assign the new value
var = whatever2();

关于c++ - 将智能指针分配给 _variant_t 是否需要手动 AddRef()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496129/

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