Я изучил atlbase.h
, чтобы увидеть, как реализован CComPtr<>
, и наткнулся на функцию Release()
в базовом классе CComPtrBase<>
, которая освобождает нижележащий объект следующим образом:
// Release the interface and set to NULL
void Release() throw()
{
T* pTemp = p;
if (pTemp)
{
p = NULL;
pTemp->Release();
}
}
Мой интеллект недостаточно хорош, чтобы понять, в чем смысл этого временного указателя pTemp
?
Почему этот код не просто:
void Release() throw()
{
if (p)
{
p->Release();
// EDIT:
p = NULL;
}
}
Теперь, если вы посмотрите в деструкторе деструктор определяется так же, как и мои ожидания из приведенного выше примера, в чем разница?