[EDIT 1 - añadió sintaxis tercer indicador (Gracias Alex)]C++ DAL - Retorno de referencia o pueblan aprobada en referencia
Qué método prefiere para una DAL y por qué de:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
Si no puede encontrar el automóvil, el primer método devuelve nulo, el segundo método devuelve falso.
El segundo método crearía un objeto Car en el montón y lo poblaría con los datos consultados desde la base de datos. Es de suponer que (mi C++ es muy oxidada) que significaría código a lo largo de las líneas de:
Car& DAL::loadCar(int id)
{
Car *carPtr = new Car();
Car &car= *carPtr;
car.setModel(/* value from database */);
car.setEngineSize(/* value from database */);
// etc
return car;
}
Gracias
Gracias. Incluso si la persona que llama escribió "Car & myCar = dal.loadCar (id)", ¿no se perdería el puntero? ¿Hay alguna forma para el código que no es DAL de eliminar la memoria creada por el DAL? – ng5000
No, si la persona que llamó escribió lo que acaba de escribir, la memoria "podría" ser liberada. Tendría que llamar a "eliminar &myCar;" para hacerlo ... lo que parece muy extraño. – Goz
La copia de la pila puede que ni siquiera suceda: según el compilador y las optimizaciones, el (N) RVO podría activarse y hacer que la operación sea equivalente a la # 1. En cualquier caso, será necesario lanzar una excepción cuando no se encuentre el auto. –