哪个是正确处理IErrorInfo版本

时间:2016-02-04 19:33:40

标签: c++ com vc6

这可能是基本的,但是自从我使用它以来已经有很长一段时间了。我见过以下各项的例子:

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()的正确方法是哪一种?有关系吗;如果是这样,为什么?

1 个答案:

答案 0 :(得分:1)

第一种用法是正确的,尽管在这里有更多的代码"你必须小心不要抛出异常。

最好使用智能指针而不是IErrorInfo *,这会在超出范围时自动调用Release()。那么你的代码就不会泄漏了#34;这里有更多的代码"抛出异常。

第二个是错误的,因为如果pError为null或不确定,则解除引用它会导致未定义的行为。