【发布时间】:2014-08-15 11:49:21
【问题描述】:
想象一种情况:
CComPtr<IGraphBuilder> pGraph;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraph));
if (SUCCEEDED(hr))
{
CComPtr<IMediaControl> pControl;
hr = pGraph->QueryInterface(IID_PPV_ARGS(&pControl));
if(SUCCEEDED(hr))
{...}
}
我想知道,pControl 是否可以在最后一个块 {...} 中为 nullptr。问题出现了,因为我看到了那个代码:
if(SUCCEEDED(hr) && pControl)
{...}
我认为那部分&& pControl 是多余的。我说的对吗?
【问题讨论】:
-
根据 com 规范,这是多余的......但没有什么能阻止糟糕的编码器自己实现 QueryInterface 并让它给出一个空指针,所以也许这个版本提供了一点保护
-
这种代码通常是一个非常糟糕的主意。但这取决于您愿意提供什么样的支持。如果您可以轻松地忽略“它不起作用”的支持请求,那么您将永远无法复制它,那么我想没关系。
标签: c++ com hresult nullptr queryinterface