Почему за каждым успешным вызовом QueryInterface () следует вызов Release ()?

Почему за вызовом QueryInterface () всегда следует вызов Release () ? Например, я видел пример кода из MSDN, как показано ниже:

HRESULT hr = S_OK;
CDecoder *pObj = new CDecoder(&hr);

if (SUCCEEDED(hr))
{
    *ppv = NULL;
    hr = pObj->QueryInterface(riid, ppv);
}
pObj->Release();
return hr;

Кто-нибудь может объяснить цель вызова Release () здесь?

11
задан sharptooth 15 August 2014 в 12:34
поделиться