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. 

I am writing to ask what's the general rule or case in which I must define my own copy constructor and assignment operator?

I would also like to know when I must define my own constructor and destructor. 

Thanks so much!