我正在尝试用 Java 编写 DagNode 类,其中两个节点在逻辑上是相等的,前提是它们作为引用是相等的。
C++ 中的想法——(我来自 C++)——将使用智能指针和引用计数:
创建节点后,我会在某个表中查找该节点是否已存在。如果是这样,我将返回一个指向旧指针的指针。否则,创建一个新节点。
复制构造函数和析构函数等重载的 C++ 方法会进行引用计数,当一个节点的引用计数降为 0 时,该节点将从上述表中逐出。 (C++ 也会释放内存。)
但是,似乎没有办法在 Java 中自动进行引用计数。我需要进行引用计数以了解何时从表中逐出一个节点(以便它可以被垃圾收集),我真的想避免调用 node->incRef()
和node->decRef()
在每个函数的开始和结束处。
我们如何在 Java 中实现这个 C++ 习惯用法?
最佳答案
在 Java 中,引用调查和垃圾是自动的。
但这并不意味着它是完全隐藏的。
你似乎需要ReferenceQueue如果你想知道一个对象什么时候可以被丢弃,可能是WeakReference如果你想保留不防止垃圾的指针。
我建议你看看java.lang.ref package的描述找到满足您需求的最佳解决方案。
关于java - Java 中的智能指针和引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429091/