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;
}