Another important consideration is that the compiler may optimize copies out of existance....

This typically happens....

1) RVO [Return Value Optimization]. The return value may actually be created directly on the return stack, and there be NO copy performed.

2) Value Parameter Passing. If the compiler (or linker in some cases) has access to the implementation of a method taking an object by value, the copy of the object may be also avoided, provided it does not alter the functional semantics.