2012-02-14 83 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有獨立於'new/delete'的特殊內存管理規則。 – JaredPar 2012-02-14 21:06:23

+0

@JaredPar我不知道COM編程。對不起,將刪除我的評論:) – Mahesh 2012-02-14 21:07:46

+0

由於Mahesh剛纔表達的關於COM的這種常見誤解,Windows充滿了內存泄漏。我希望MSDN更好地解釋這... – ahmd0 2012-02-14 21:08:43

回答

3

是的您必須致電VariantClear。如果成功,方法VariantChangeType將基本上將源的副本強制到目的地。目標中的這個副本現在是獨立跟蹤的,必須單獨清除。

+1

是的,謝謝。我希望VariantChangeType文件提到它... – ahmd0 2012-02-14 21:06:57