我在我的应用程序中构建了许多对象树,其中每个节点都是典型的树节点(对父节点的引用和对子节点的引用列表)。这些树是临时的,这意味着我可能会在应用程序终止之前处理它们。
到目前为止,我一直在树节点类中添加一个方法,该方法能够递归地遍历树分支并“销毁它”(将父引用设置为 null 并清除子列表等)。
public void destroy() {
for (Node node : children) {
node.destroy();
}
parent = null;
children.clear();
}
这对我来说总是有意义的,因为简单地将对您存储在某处的树根的引用设为空是不够的 - 孩子可能仍然有对它的引用,这意味着它将留在内存中并导致内存泄漏. 我假设这一点并提供这样的方法是否正确?
我怀疑自己的原因是我很少在提供树结构支持的 API 中看到这样的方法(至少不是直接在树节点接口中)。处理此类案件的正确模式是什么?