【发布时间】:2011-10-26 04:06:42
【问题描述】:
我的问题和这个类似:Managing destructors of managed (C#) and unmanaged (C++) objects
但有一个转折。
本质上,我有一个对象图或层次结构,其中 Foo 类拥有对 Bar 类的多个实例的一些引用(等等)
在 .NET 中,我有一个 Foo 的托管表示,它维护一个 IntPtr 到真正的 Foo,并使用 P/Invoke 调用真正的 Foo 上的方法(充当代理)。
Foo(代理)的托管实现实现了IDisposable。
代理Foo 包含List<Bar> 类型的只读属性。
我的托管Bar 代理以相同的方式工作(保留IntPtr 代表真正的Bar)。
当真正的Foo 被释放时,它会释放它所有的孩子(包括所有Bars)。
处理这种情况的最佳方法是什么 - 因为我不希望 Foo 代理的托管客户端获得对 Bar 的引用并保持比他们的引用更长的时间到Foo 代理。
【问题讨论】: