这可能是基本的,但我已经有很长时间没有使用它了。我见过如下每个示例:
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()
的正确方法?有关系吗;如果是,为什么?
最佳答案
第一种用法是正确的,尽管在“此处有更多代码”中您必须注意不要抛出异常。
最好使用智能指针而不是 IErrorInfo *
,它会在超出范围时自动调用 Release()
。那么你的代码就不会在“more code here”抛出异常的情况下泄露。
第二个是错误的,因为如果 pError
为 null 或不确定,那么取消引用它会导致未定义的行为。
关于c++ - 哪个是 IErrorInfo 版本的正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209971/