我的问题是类似这样的:Managing destructors of managed (C#) and unmanaged (C++) objects处理管理对象代理的图形到非托管对象
但与一捻。
我有,基本上,一个对象图,或层次结构,其中类Foo
拥有到Bar
类(等)的多个实例一些参考
在.NET我已经的Foo
一个管理表示:维护IntPtr
到真实Foo
并使用P/Invoke调用实际Foo
(充当代理)的方法。 (代理)执行IDisposable
。
代理Foo
包含List<Bar>
类型的只读属性。我的代理Bar
代理以相同的方式工作
当真正的Foo
被释放时,它释放它的所有孩子(包括所有的Bar
s)。
什么是处理这种情况最好的办法 - 因为我不想Foo
代理管理的客户端得到一个参考的保持到Bar
,并保持它周围的时间比他们做他们的Foo
参考代理。
我用这个解决方案的问题是,你暗示'Bar'和'Foo'代理之间的父/子关系不存在。因为我不知道基础'List'项目何时更改,所以每次调用'List '属性时都会创建新的托管代理类。在'Foo'中保留每个创建的'Bar'的引用都是不可行的(这个列表可能会增长到数百万个实例)。 –
Steve
也许我误解了这个“我基本上有一个对象图或层次结构,其中Foo类拥有对Bar类的多个实例的一些引用(等等)”......并不意味着不暗示父母/孩子? – tcarvin
在** unmanaged **的土地上,是的,'Foo'拥有几个'Bar's。但在**托管的**域中,每次检索列表时都会创建新的“Bar”代理。 – Steve