2012-02-14 10 views
1

私はC++で次のコードを持っています。私は 'varDest'変数を解放する必要がありますか?VariantChangeTypeの後にVariantClearを呼び出す必要がありますか?

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

@Mahesh COMには、新しい/削除とは独立した特別なメモリ管理ルールがあります。 – JaredPar

+0

@JaredPar COMプログラミングは認識していません。申し訳ありませんが、私のコメントを削除します:) – Mahesh

+0

Maheshがちょうど表明したCOMに関するこのような誤解のため、Windowsはメモリリークでいっぱいです。私はMSDNがこれを説明するのがよかったと思っています。 – ahmd0

答えて

3

はい、VariantClearに電話する必要があります。 VariantChangeTypeメソッドが成功した場合、ソースのコピーが本質的に宛先に強制的に強制されます。宛先のこのコピーは現在独立して追跡され、独立してクリアする必要があります。

+1

ええ、ありがとう。私はVariantChangeTypeのドキュメントがそれを言いました... – ahmd0

関連する問題