5 General rule
In general, if a class contains a pointer to at least one dynamically allocated object that is private to an object of the class, it
needs the following:
- a default constructor to make the pointer NULL
- a destructor to delete the dynamically allocated object(s)
- a deep copy copy constructor
- a deep copy assignment operator