Existe una manera correcta de devolver una nueva instancia de objeto por referencia en C ++?
Entonces estaba escribiendo un código y tenía algo como esto:
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect( void ) const
{
return Rectangle( x, y, w, h );
}
};
Luego, en algún código:
Rectangle rect = theBox.GetRect();
Lo que funcionó en mi versión de depuración, pero en el lanzamiento hubo "problemas" que devolvieron ese Rectángulo por referencia: básicamente obtuve un rectángulo no inicializado. La clase Rectangle tiene un operador = y un constructor de copia. Sin entender por qué se rompió esto, en realidad estoy más interesado en la forma correcta de devolver un (nuevo) objeto por referenciaa fin de asignando copiando a una variable. ¿Solo estoy siendo tonto? ¿No debería hacerse? Sé que puedo devolver un puntero y luego desreferenciar en la asignación, pero prefiero no hacerlo. Una parte de mí siente que regresar por valor daría como resultado una copia redundante del objeto: ¿el compilador se da cuenta y lo optimiza?
Parece una pregunta trivial. Me siento casi avergonzado de no saber esto después de muchos años de codificación C ++, así que espero que alguien pueda aclarar esto por mí. :)