我的问题与此类似: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
被释放后,它会释放所有的孩子(包括所有Bar
)。
处理此方案的最佳方法是什么 - 因为我不希望Foo
代理的托管客户端获取对Bar
的引用并保持比他们引用了Foo
代理。
答案 0 :(得分:0)
也许我过度简化了这一点,但是你的Bar
(代理)类应该有一个Dispose
方法,由父/所有者Foo
类调用。和许多类一样,一旦Bar
对象被处理掉,它应该将内部m_disposed
标志设置为true,如果之后使用任何方法,则抛出ObjectDisposed
异常。只要内部非托管资源已被清除,您就不应该关心客户端是否有对托管Bar
对象的引用。
答案 1 :(得分:0)
我刚刚实施了一个简单的引用计数方案。
我希望会有其他方式,但是,在一天结束时,它很简单,而且确实是正确的解决方案。