我有一个类可以保存非托管资源列表。这些应该在终结器中清理,以确保没有泄漏。但是,它们包含在List<IntPtr>.
中我对这种情况有几个问题:
答案 0 :(得分:0)
关于最终确定指南的简短说明
对象的Finalize方法应该释放任何外部资源 对象拥有。此外,Finalize方法应该仅发布 对象所持有的资源。 Finalize方法应该 不引用任何其他对象。
http://msdn.microsoft.com/en-us/library/vstudio/b1yfkh5e(v=vs.100).aspx
Finalize和Dispose指南位于文章底部
答案 1 :(得分:0)
我在这里找到答案: https://stackoverflow.com/a/20167998/553294。这里supercat声明:
如果一个对象有一个活动的终结器,那么如果GC会收集它(但是对于终结器的存在),GC会将它添加到一个对象队列中,这些对象的终结器应该尽快运行,并且已经这样做了,取消激活它。队列中的引用将阻止GC收集对象,直到终结器运行;一旦终结器完成,如果该对象没有其他引用并且它没有重新注册其终结器,它将不再存在。
因此,在终结队列中,对象被认为是可达的,这意味着内部列表也被认为是可到达的。因此,从终结器访问列表是安全的。