Así que yo estaba escribiendo algo de código, y yo tenía algo como esto:¿Hay una forma correcta de devolver una nueva instancia de objeto por referencia en C++?
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect(void) const
{
return Rectangle(x, y, w, h);
}
};
Luego, más tarde en algún código:
Rectangle rect = theBox.GetRect();
que funcionó en mi generación de depuración, pero en la versión que había "cuestiones "devolviendo 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 entrar en el por qué esto se rompió, estoy realmente más interesado en la forma correcta de devolver un objeto (nuevo) por referencia con el propósito de asignando copiando a una variable. ¿Solo estoy siendo tonto? ¿No debería hacerse? Sé que puedo devolver un puntero y luego eliminar la referencia en la asignación, pero prefiero no hacerlo. Alguna parte de mí siente que regresar por valor resultaría en una copia redundante del objeto. ¿Lo descifra el compilador y lo optimiza?
Parece una pregunta trivial. Me siento casi avergonzado. No lo sé después de muchos años de codificación C++, así que espero que alguien pueda aclararme esto. :)
Tenga en cuenta que no hay una asignación en el código. –