Это, скорее всего, базовый, но с тех пор я использовал это. Я видел примеры, как каждый из следующих действий:Какая правильная обработка релиза IErrorInfo
IErrorInfo *pError;
HRESULT hrError = ::GetErrorInfo(NULL, &pError);
//more code here
if (SUCCEEDED(hrError) && pError) {
//more code here
pError->Release();
}
, а затем в других
IErrorInfo *pError;
HRESULT hrError = ::GetErrorInfo(NULL, &pError);
//more code here
if (SUCCEEDED(hrError) && pError) {
//more code here
}
pError->Release();
Какой из них правильный способ использовать Release()
здесь? Это имеет значение; и если да, то почему?
Они оба ошибаются. Этот тип «не скажите мне, что у меня ошибка с нулевой указателем», стиль кодирования широко распространен и не делает ничего, кроме создания отчетов об ошибках «он не работает». Вы не можете в конечном итоге найти ошибку во втором фрагменте. –
@ HansPassant, возможно, эта неустановленная часть того, что беспокоило меня о первом примере, теперь, что было бы лучшим способом сделать это? –
Просто удалите '&& pError' –