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

时间:2011-09-21 07:32:10

标签: c++ visual-c++ smart-pointers variant

以下是一个示例代码段:

_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());

你的想法?

1 个答案:

答案 0 :(得分:1)

如果您直接分配给punkVal成员(如第一个代码段),则需要AddRef() - 没有人会为您执行此操作。更好的方法是使用operator=()的{​​{1}}成员:

_variant_t

或按照您的建议 - 使用转换构造函数:

_variant_t var;
var = unknownInterfaceSmartPointer.GetInterfacePointer();

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

_variant_t