作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
至于标题,我有一个 com 事件,一些类调用了它的 Advise
。是否有必要在生成事件的 com 对象被销毁之前调用 Unadvise
函数?
最佳答案
是的,有必要。在您取消通知之前,连接点持有一个接收器接口(interface)指针并阻止其释放。它不会在收到 Unadvise
请求之前释放它。不执行 Unadvise 你将让它永远活着,导致类似内存泄漏的情况,并且接收器将继续接收可能导致其他问题的事件。
如果您正在释放事件源并且这会导致源破坏,那么是的,它可能会释放所有接收器指针。但是,如果其他人也持有对该对象的引用,则不会发生这种情况。因此,很容易以循环引用结束,而当它们开始造成泄漏时,很难确定它们。
在连接点的情况下,循环引用是典型的。您出于不明智的目的保留点的接口(interface),连接点保留您的接收器接口(interface)。 Unadvise 是您通常如何在 COM 对象之间启动此引用的正常终止。
关于c++ - 是否有必要在 IConnectionPointImpl 被销毁之前取消通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994610/
至于标题,我有一个 com 事件,一些类调用了它的 Advise。是否有必要在生成事件的 com 对象被销毁之前调用 Unadvise 函数? 最佳答案 是的,有必要。在您取消通知之前,连接点持有一个
我们有一个 native C++ 应用程序,它支持一些基于 COM 的各种类型的 VBA 宏。这些类型之一,VBAExtension , 将自身注册到核心 C++ 应用程序,从而产生(派生自的类)IC
我是一名优秀的程序员,十分优秀!