[EDIT 1 - troisième syntaxe de pointeur ajoutée (Merci Alex)]C++ DAL - Retour de référence ou POPULATE Passed En référence
Quelle méthode préférez-vous un DAL et pourquoi de:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
Si incapable de trouver la première méthode de voiture renvoie null, la deuxième méthode renvoie false.
La seconde méthode créerait un objet Car sur le tas et remplirait avec des données interrogées à partir de la base de données. On peut supposer que (mon C++ est très rouillée) qui signifie le code le long des lignes 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;
}
Merci
Merci. Même si l'appelant a écrit "Car & myCar = dal.loadCar (id)" le pointeur ne serait-il pas perdu? Y a-t-il un code non DAL pour supprimer la mémoire créée par le DAL? – ng5000
Non si l'appelant a écrit ce que vous venez d'écrire, la mémoire "pourrait" être libérée. Vous devez appeler "supprimer &myCar;" pour le faire si ... ce qui semble très étrange. – Goz
La copie de la pile ne peut même pas arriver: en fonction du compilateur et des optimisations, le RVO (N) peut démarrer et rendre l'opération équivalente à # 1. Dans tous les cas, lancer une exception lorsque la voiture n'est pas trouvée sera nécessaire. –