TreeData rewritten, using forEachNode. Copy assignment operator corrected and move operations added
Summary
I have rewritten the TreeData structure, using the copy-and-swap ideom and forEachNode loops.
Motivation
In TreeData there is a bug in the copy assignment operator: If tree_ is already set, it is destroyed first, but not initialized afterwards, so that the CopyVisitor would produce a segfault. Simple solution:
TreeData& operator=(const TreeData& other)
{
if (tree_) {
TypeTree::applyToTree(*tree_, DestroyVisitor(data_));
TypeTree::applyToTree(*tree_, InitVisitor(data_));
}
tree_ = other.tree_;
TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));
return *this;
}
However, this implementation seems not so very clean. So, I have rewritten the TreeData structure. Additionally, I have added move-operations and a small test for all the functions.
Edited by Carsten Gräser