 <p>Technically the copy constructor gets invoked in the following cases:</p> <ol> <li>explicit copy construction</li> <li>call by value</li> <li>return by value</li> </ol> <p>The assignment operator is implemented to obliterate an exiting instance's old contents with new ones. As you showcase an example:</p> <pre><code>myClass newInstant; newInstant = oldInstant;//assignment operator </code></pre> <p>Keep in mind that they work differently. Copy-swap involves in the assignment operator. </p> <p>Regarding your last question, modern compilers apply copy constructor elision to elide unnecessary copy constructor call. </p>