Ceci est probablement de base, mais cela fait longtemps que je l'ai utilisé. Je l'ai vu des exemples comme chacun des éléments suivants:Quelle est la bonne manipulation de IErrorInfo version
IErrorInfo *pError;
HRESULT hrError = ::GetErrorInfo(NULL, &pError);
//more code here
if (SUCCEEDED(hrError) && pError) {
//more code here
pError->Release();
}
puis ailleurs
IErrorInfo *pError;
HRESULT hrError = ::GetErrorInfo(NULL, &pError);
//more code here
if (SUCCEEDED(hrError) && pError) {
//more code here
}
pError->Release();
Lequel de ces est la bonne façon d'utiliser le Release()
ici? Est-ce que ça importe; et si oui, pourquoi?
Ils ont tous deux tort. Ce genre de style de codage «ne me dis pas que j'ai un bug de pointeur nul» est omniprésent et ne fait que créer des rapports de bugs «ça ne marche pas». Vous ne pouvez pas éviter de trouver le bogue dans le deuxième extrait. –
@HansPassant peut-être cette partie non déclarée de ce qui m'a dérangé au sujet du premier exemple, maintenant quelle serait la meilleure façon de le faire? –
Il suffit de supprimer '&& pError' –