在用到Interface的时候,即使是用CComPtr,也不是高枕无忧的。
如下面这段代码:
IXMLDOMNode* CClass::GetNode(const CComBSTR &cbstrPath)
{
CComPtr<IXMLDOMNode> pNode;
/// 通过_pDoc取得了某个node
return pNode.Detach();
}
外面接收的地方:
CComPtr<IXMLDOMNode> pNode = GetNode(...);
由于接收的地方使用的是CComPtr,导致实际上是AddRef了,而原来的一个则leak了,导致了Interface的leak。因此要么使用pNode.Attach(),不过感觉上还是使用引用方式比较好。
即:
HRESULT CClass::GetNode(const CComBSTR &cbstrPath, CComPtr<IXMLDOMNode> &pNode)
{
/// 通过_pDoc取得了某个node
return S_OK;
}