这可能是基本的,但是自从我使用它以来已经有很长一段时间了。我见过以下各项的例子:
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()
的正确方法是哪一种?有关系吗;如果是这样,为什么?
答案 0 :(得分:1)
第一种用法是正确的,尽管在这里有更多的代码"你必须小心不要抛出异常。
最好使用智能指针而不是IErrorInfo *
,这会在超出范围时自动调用Release()
。那么你的代码就不会泄漏了#34;这里有更多的代码"抛出异常。
第二个是错误的,因为如果pError
为null或不确定,则解除引用它会导致未定义的行为。