首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放IDispatch指针

释放IDispatch指针
EN

Stack Overflow用户
提问于 2013-10-22 21:13:35
回答 1查看 1.9K关注 0票数 1

引用了IUnUn为人所知的-> Release ()文档:“当您不再需要使用接口指针时,调用方调用此方法。如果您正在编写一个采用输入-输出参数的方法,则在将输出值复制到该方法之上之前,对要传入的指针进行调用释放。”

1.在下面的代码中调用pDocument->Release()之后,@rc变量等于1。我应该为pDocument打两次电话发布吗?

2.在何种情况下,IDispatch的参考计数增加?

3.当我将IDispatch作为指针传递给函数时,它的引用计数会增加吗?

4.我有几十个IDis补丁*对象,那么如果我忘记发布()其中的任何一个,该怎么办?内存泄漏?

5.是否有任何简单的方法来发布所有IDis补丁*或者我必须手动发布它们?

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19528482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档