The Anatomy of the Assignment Operator (1997)
icu-project.org
icu-project.org
if (this == &that) return *this;
TFoo tmp(that);
swap(tmp);
return *this;
(Assume swap does not throw, it's trivial to implement because swapping pointers wouldn't throw.) This way the constructor of tmp takes care of destroying partially-constructed objects and you don't need to do it by hand. It seems like the clean up code just repeats what the compiler would automatically generate for you in a constructor.[This is from 1997, btw.]
[1] http://stackoverflow.com/questions/3279543/what-is-the-copy-...