in reply to Deallocating HASH pointer
It depends whether you nodes have cycles or not. If the parent points to the children but the children don't point back to the parent, nor to each other, then deleting the tree will delete all the nodes. Otherwise they will not, as even if you drop the reference to the root, its children will still point at it, hence its refcount (the number of variables that point at the root) will not go down to 0 and it will not be freed.
The 2 ways to solve the problem are: to manually go through the descendants of the root, as you shown in your post, or to use weaken, from Scalar::Util: weaken all references to a node except one (typically the link from the parent), and when the root is deleted the refcount of its children _will_ go down to 0, and so on for all nodes in the tree.
|
|---|