2012-02-14 2 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

+0

@JaredPar COM 프로그래밍을 잘 모릅니다. 죄송합니다, 내 의견을 삭제합니다 :) – Mahesh

+0

Mahesh가 방금 전한 COM에 대한 일반적인 오해로 인해 Windows에서 메모리 누수가 너무 많습니다. 이 MSDN 설명하는 것이 더 좋았 으면 좋겠어 ... – ahmd0

답변

3

예 (VariantClear)로 전화해야합니다. VariantChangeType 메소드가 성공적이면 소스의 복사본을 대상으로 강제 변환합니다. 대상의이 복사본은 이제 독립적으로 추적되므로 독립적으로 지워야합니다.

+1

예, 고마워요. VariantChangeType 설명서에서 언급했으면 좋겠어. – ahmd0

관련 문제