Al devolver un objeto por valor SIEMPRE se hace una copia del mismo. Por ejemplo, si A es una clase
A funcion()
{
A Resultado;
return A;
}
main()
{
funcion();
}
El objeto Resultado es interno a funcion(), con lo que se destruye automáticamente inmediatamente después del return (cuando salimos del ámbito de funcion()). La función main(), por tanto, no lo puede ver en ningún caso. Para que pueda verlo, al hacer return se hace una copia, y main() ve realmente a la copia.
Se bueno.