[EDIT 1 - ha aggiunto la sintassi terzo puntatore (grazie Alex)]C++ DAL - Ritorno di riferimento o popolano passata in riferimento
Quale metodo si preferisce per un DAL e perché fuori:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
Se non si riesce a trovare il primo metodo, la macchina restituisce null, il secondo metodo restituisce false.
Il secondo metodo creerebbe un oggetto Car sull'heap e popolerà con i dati interrogati dal database. Presumibilmente (mio C++ è molto arrugginita) che significherebbe codice lungo le linee di:
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;
}
Grazie
Grazie. Anche se il chiamante ha scritto "Car & myCar = dal.loadCar (id)", il puntatore non andrebbe perso? Esiste comunque un codice non DAL per cancellare la memoria creata dal DAL? – ng5000
No, se il chiamante ha scritto ciò che hai appena scritto, la memoria "potrebbe" essere liberata. Avresti bisogno di chiamare "delete &myCar;" per farlo però .. che sembra molto strano. – Goz
La copia dello stack potrebbe anche non accadere: a seconda del compilatore e delle ottimizzazioni, il (N) RVO potrebbe dare il via e rendere l'operazione equivalente a # 1. In ogni caso sarà necessario lanciare un'eccezione quando l'auto non viene trovata. –