Danger of destructors: objects are copied in many situations.
We need to make sure that the copies are deep copies
and not shallow copies. Otherwise, when a destructor is called
it frees the memory that other objects are still pointing to.
Examples of bad behavior: