Copy Constructors
In every class, the compiler automatically supplies both a
copy constructor and an assignment operator if we don't
explicitly provide them.
Both of these member functions perform copy operations
by performing a memberwise copy from one object to
another.
In situations where pointers are not members of a class,
memberwise copy is an adequate operation for copying
objects.
However, it is not adequate when data members point to
memory dynamically allocated within the class.