Нужно ли вызывать VariantClear после VariantChangeType - PullRequest
1 голос
/ 15 февраля 2012

У меня есть следующий код на C ++.Нужно ли освобождать переменную 'varDest'?

VARIANT val;
if(SUCCEEDED(classObj->Get(pwPropName, 0, &val, NULL, 0)))  //WMI property retrieval
{
    //Then at some point
    VARIANT varDest;
    varDest.vt = VT_EMPTY;
    if(SUCCEEDED(::VariantChangeType(&varDest, 
        const_cast<VARIANT *>(&val), 0, VT_BSTR)))
    {
        //Do I need to call the following?
        VariantClear(&varDest);
    }

    VariantClear(&val);
}

1 Ответ

3 голосов
/ 15 февраля 2012

Да, вы должны позвонить VariantClear. Метод VariantChangeType в случае успеха по существу приведет к копированию источника в место назначения. Эта копия в месте назначения теперь независимо отслеживается и должна быть независимо очищена.

...