例如,假设在 C# 4 中包含一个“delete”关键字。由于基于引用的系统,是否可以保证您永远不会有野指针,但仍然能够依赖垃圾收集器?
我看到它可能发生的唯一方法是,如果不是对内存位置的引用,而是引用将是指向实际对象的指针表的索引。但是,我确信在某些情况下会中断,并且可能会中断类型安全/具有悬空指针。
编辑:我不是在谈论.net。我只是以 C# 为例。
最佳答案
你可以 - 有点:让你的对象一次性,然后自己处理。
手动删除不太可能提高托管环境中的内存性能。它可能对非托管资源有所帮助,dispose 就是这样。
我宁愿更容易实现和使用 Disposable 对象。我不知道这应该是什么样子的,但在 .NET 下管理非托管资源是一个冗长的痛苦。
实现删除的一个想法:
delete 标记一个用于手动删除的对象。在下一个垃圾回收周期中,该对象将被移除,并且对其的所有引用都设置为 null。
起初听起来很酷(至少对我而言),但我怀疑它是否有用。
这也不是特别安全 - 例如另一个线程可能正忙于执行该对象的成员方法,这样的方法需要抛出例如访问对象数据时。
关于language-agnostic - 垃圾收集可以与显式内存管理共存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236290/