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