以下是一个示例代码段:
_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());
你的想法?
答案 0 :(得分:1)
如果您直接分配给punkVal
成员(如第一个代码段),则需要AddRef()
- 没有人会为您执行此操作。更好的方法是使用operator=()
的{{1}}成员:
_variant_t
或按照您的建议 - 使用转换构造函数:
_variant_t var;
var = unknownInterfaceSmartPointer.GetInterfacePointer();
后两种变体都很好,代码中不需要_variant_t var(unknownInterfaceSmartPointer.GetInterfacePointer());
- 它将在AddRef()
实现中完成。此外,它们是有益的,因为如果您重新分配到相同的变体,实现将为您进行适当的清理:
_variant_t