引用 IUnknown->Release() 文档:“调用者注意事项当您不再需要使用接口指针时调用此方法。如果您正在编写一个采用 in-out 参数的方法,请在您传递的指针上调用 Release在将输出值复制到它上面之前。”
1.在下面的代码中调用 pDocument->Release() 后,@rc 变量等于 1。我应该为 pDocument 调用两次 Release 吗?
2.IDispatch的引用计数在哪些情况下会增加?
3.当我将 IDispatch 作为指针传递给我的函数时,它的引用计数会增加吗?
4.我有几十个 IDispatch* 对象,如果我忘记 Release() 其中任何一个怎么办?内存泄漏?
5.是否有任何简单的方法可以释放所有 IDispatch* 或者我必须手动释放它们?
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pDocuments, TEXT("Close"), 1, saveChanges.GetVARIANT());
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pWApp, TEXT("Quit"), 0);
//Finalizing
if (pWApp)
{
pWApp->Release();
pWApp = NULL;
}
if (pDocuments)
{
ULONG rc = pDocuments->Release();
pDocuments = NULL;
}
if (pActiveDocument)
{
pActiveDocument->Release();
pActiveDocument = NULL;
}