Если вы напрямую назначаете участника punkVal
(как в вашем первом фрагменте), тогда вам нужен AddRef()
- никто не сделает это за вас.Гораздо лучше было бы использовать operator=()
член _variant_t
:
_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();