More C++ Classes: Copy and Move Semantics: Listing 1
Overriding copy semantics to implement deep tree copies.
// copy constructor.
tree::tree(const tree<T>& other) : tree{}
{
// if the other tree isn't empty, it's copied from its root.
if (!other.is_empty()) root_.reset(new node{*(other.root_)});
}
// copy assignment.
tree::tree& operator=(const tree<T>& other)
{
if (this == &other) return *this; // handle self-assignment
// if the left-side tree isn't empty, it's cleared. Existing nodes are deleted.
if (!is_empty())
{
root_.reset(nullptr);
}
// if the other tree isn't empty, it's copied from its root.
if (!other.is_empty()) root_.reset(new node{*(other.root_)});
return *this;
}
About the Author
Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at [email protected].