title: When to provide user-defined copy constructor and assignment operator?
body: <p>Do we only need to write a copy constructor and assignment operator when we have pointer data members (because otherwise two pointers could point to the same object when the compiler-generated copy ctor does a shallow copy)? </p>
  
  <p>If all our data members are allocated on the stack we can just rely on compiler-defined copy constructor and assignment operator?</p>