>From: "Noel Yap" <[EMAIL PROTECTED]> > Terje Slettebų wrote: > > The compiler may elide such copy, even if the temporary being returned is a > > named variable, and several compilers (such as g++ and the EDG based ones), > > does this optimisation (RVO). For example: > > Playing devil's advocate, I think RVO can easily be fooled with > not-so-tricky code. If you're really concerned about this situation, > use some sort of smart pointer. For example: > > boost:shared_ptr< T > f( boost::shared_ptr< T > const in_ );
The part about RVO was really concerned with the out() scenario, not in_out(). I'm not sure if passing a smart pointer buys you very much. In this case, the smart pointer is const but the pointee is not, so the "const" in the signature is really just masking what is going on. Furthermore, this means dynamical allocation (either by caller or callee), which may be more expensive than making a copy on the stack (unless it's elided), and passing that. Yes, there are ways to write it so that RVO is disabled, but with careful coding for this, such as using single exit, you can enable it, and it can be tested for. Regards, Terje _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost