引用了IUnUn为人所知的-> Release ()文档:“当您不再需要使用接口指针时,调用方调用此方法。如果您正在编写一个采用输入-输出参数的方法,则在将输出值复制到该方法之上之前,对要传入的指针进行调用释放。”
1.在下面的代码中调用pDocument->Release()之后,@rc变量等于1。我应该为pDocument打两次电话发布吗?
2.在何种情况下,IDispatch的参考计数增加?
3.当我将IDispatch作为指针传递给函数时,它的引用计数会增加吗?
4.我有几十个IDis补丁*对象,那么如果我忘记发布()其中的任何一个,该怎么办?内存泄漏?
5.是否有任何简单的方法来发布所有IDis补丁*或者我必须手动发布它们?
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;
}发布于 2013-10-22 21:23:17
1.在下面的代码中调用pDocument->Release()之后,@rc变量等于1。我应该为pDocument打两次电话发布吗?
不是的。这意味着其他人也持有对该对象的引用,如果您让对象直接从对象下面删除自身,他们就不会感到好笑。
2.在何种情况下,IDispatch的参考计数增加?
当您对其调用AddRef时,或在引用同一对象的任何其他接口指针上。
3.当我将IDispatch作为指针传递给函数时,它的引用计数会增加吗?
不不是自动的。当然,这个函数可以自由地保存AddRef,如果需要将指针存储在某个地方,那么它就可以在函数返回后使用。
4.我有几十个IDis补丁*对象,那么如果我忘记发布()其中的任何一个,该怎么办?内存泄漏?
是。当您忘记free您已经编辑的东西,或者delete,您已经编辑过的东西,或者fclose,您已经编辑过的东西时,会发生同样的事情。
5.是否有任何简单的方法来发布所有IDis补丁*或者我必须手动发布它们?
查看智能指针,例如CComPtr或_com_ptr_t。
https://stackoverflow.com/questions/19528482
复制相似问题