When you overload the assignment operator carelessly, you may trigger 1 or 2 implicit calls to the copy constructor. Compared to assignment, copy constructor is even more implicit, more frequently called, more part-of-the-fabric.
The pattern starts with C pbclone (pass-by-clone aka pass-by-value) convention. All java primitives (and c# value types?) are pbclone. Every object passing in and out triggers the copy constructor.
Similarly, C++ class types are pbclone by default, unless you specify references in the func prototype. In an overloaded assignment operator, there is exactly one pass-in and one pass-out, so a careless overload triggers exactly 2 copy constructor calls.
Actually, even more part-of-the-fabric than copier is pbref, because the default copier has signature (MyClass const& rhs).
 either the return type or the param types, or both