Assigning an object to itself is disastrous, so whenever you have to define a copy constructor and assignment operator, make sure your code is guarded from such a mistake:
class Date { int day, month, year; //... Date & operator= (const Date & other){ *this=other; //Dangerous return *this;} //...}void f () { Date d; Date *pdate = &d; //...many lines of code *pdate=d; //oops, object assigned to itself; disastrous}//f()
A safe version should look like this:
Date & Date::operator= (const Date & other) { if (&other != this) //guarded from self assignment { *this = other; //... } return *this; }