
On 05/12/2010 01:11, Peter Foelsche wrote:
Anybody know in which cases the compiler optimizes away or does not optimize away the call to the copy-constructor when returning an object by value?
Whenever the object returned is a temporary or local variable, and the result of the function is used to initialize a new object. You can also benefit from this optimization in assignments by writing your assignment operator as type& operator(type other) { swap(other); return *this; } since the return of the function is then used to directly initialize 'other' without any copy.
I still think that something like this should be available in some library for people, which cannot write such a wrapper in a few minutes by themselves.
To make such a solution generic, you would have to be able to make a good "smart reference" first, which isn't possible due to lack of operator. overloading.