gpt4 book ai didi

c++ - 是否有必要在 IConnectionPointImpl 被销毁之前取消通知?

转载 作者:行者123 更新时间:2023-11-30 01:55:07 26 4
gpt4 key购买 nike

至于标题,我有一个 com 事件,一些类调用了它的 Advise。是否有必要在生成事件的 com 对象被销毁之前调用 Unadvise 函数?

最佳答案

是的,有必要。在您取消通知之前,连接点持有一个接收器接口(interface)指针并阻止其释放。它不会在收到 Unadvise 请求之前释放它。不执行 Unadvise 你将让它永远活着,导致类似内存泄漏的情况,并且接收器将继续接收可能导致其他问题的事件。

如果您正在释放事件源并且这会导致源破坏,那么是的,它可能会释放所有接收器指针。但是,如果其他人也持有对该对象的引用,则不会发生这种情况。因此,很容易以循环引用结束,而当它们开始造成泄漏时,很难确定它们。

在连接点的情况下,循环引用是典型的。您出于不明智的目的保留点的接口(interface),连接点保留您的接收器接口(interface)。 Unadvise 是您通常如何在 COM 对象之间启动此引用的正常终止。

关于c++ - 是否有必要在 IConnectionPointImpl 被销毁之前取消通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com