Estoy aprendiendo C++ desde un fondo de C y Java principalmente y tengo curiosidad sobre cuál es la mejor manera de devolver un objeto en C++ sin tener que copiar el objeto. Desde mi punto de vista, C++ 11 introdujo referencias rvalue (& &) para mover datos desde una variable temporal (como opuesta a la copia). Ejemplo:Devolución de un objeto en C++
std::string getStr(){
return "Hello";
}
std::string &&hello = getStr();
Otra forma en que podría pensar es en usar un puntero compartido.
std::tr1::shared_ptr<std::string> getStr(){
std::tr1::shared_ptr<std::string> hello(new std::string("Hello"));
return hello;
}
auto hello = getStr();
estoy pensando que tal vez una referencia rvalue es mejor, pero me gustaría una segunda opinión antes de que lo uso. ¿Cual es mejor?
¿También se recomienda que los campos de una clase sean referencias de valor si no se configuran con el constructor? Ejemplo:
class StringHolder{
public:
std::string &&str;
};
StringHolder sh;
sh.str = getStr();
¡Muchas gracias muchachos!
Puede encontrar [Una breve introducción a las referencias de Rvalue] (http://www.artima.com/cppsource/rvalue.html) útil –
Las implementaciones modernas de la biblioteca estándar utilizarán la optimización de cadenas pequeñas, por lo que dinámicamente la asignación de un la cadena "Hola" podría ser más lenta que simplemente devolver una por valor. – bames53