title: When should I define my own copy ctor and assignment operator
body: <p>I am reading effective C++ in Item 5, it mentioned two cases in which I must define the copy assignment operator myself. The case is a class which contain const and reference members. </p>
  
  <p>I am writing to ask what's the general rule or case in which I must define my own copy constructor and assignment operator?</p>
  
  <p>I would also like to know when I must define my own constructor and destructor. </p>
  
  <p>Thanks so much!</p>