[comp.lang.c++] return object

chin@sg1.chem.upenn.edu (Chin Wu) (08/08/90)

Avoid extra constructor call when returning classes from functions.
===================================================================

Consider a function `m ()' with a return value of class `X'.

     X m () { X b; b.a = 23; return b; }

and the declaration

     X v = m ();

What happens here is that `m ()' secretly has an argument, the
address of the return value.  At invocation, the address of enough space
to hold `v' is sent in as the hidden argument.  Then `b' is constructed
and its `b' field is set to the value 23. Then an X(X&) constructor is
applied to `b', with the hidden return value location as the target, so
that `v' is now bound to the return value.

But this is pretty wasteful. The local `b' is declared just to hold
something that will be copied right out.  While a compiler that
combined an "elision" algorithm with interprocedural data flow
analysis could conceivably eliminate all of this, it seems much more
practical to allow programmers to assist the compiler in generating
efficient code by somehow manipulating the return value explicitly,
thus avoiding the local variable and X(X&) constructor all together.

--------------------
Above is an extract from G++ info file. Is there any way in C++ you
can avoid this problem? Any help will be appreciated.

chin@sg1.chem.upenn.edu
--
chin@sg1.chem.upenn.edu