我有两个 COM 对象(我们称它们为Control
和Job
)。Control 是 CoCreatable,Job 对象由Control.NewJob()
.
Control 有一种方法Control.Start(job)
可以使指定的作业成为当前作业。只要没有设置其他作业,它就一直是当前作业。
现在对于客户端来说,对于这些特定控件,以下行为似乎是合理的:
只要其中一个作业存在,控制就存在
(微不足道:作业对它创建的控制持有强引用)只要客户端有对 Control 或其 CurrentJob 的引用,它们都不会被销毁(“微不足道”:CurrentJob 是一个强引用)
客户端在发布引用之前不需要“清除”CurrentJob
现在,我在这里有一个经典的循环引用,释放它的条件是两个对象都没有外部引用。
我可以通过处理 ATL 的 InternalRelease 实现来解决这种情况,但这非常丑陋和孤立。
有什么建议么?现有的解决方案?