に渡された移入[EDIT 1 - 追加第三ポインタの構文(おかげでアレックス)]C++ DAL - リターンリファレンスまたはリファレンス
あなたがDALのために好むと理由のうちしまう方法:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
車の最初のメソッドが見つからない場合はnullを返し、2番目のメソッドはfalseを返します。
2番目の方法は、ヒープ上にCarオブジェクトを作成し、データベースからクエリされたデータを取り込みます。第二は間違いなく望ましい
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;
}
おかげ
ありがとうございました。呼び出し元が "Car&myCar = dal.loadCar(id)"と書いたとしても、ポインタは失われませんか?とにかくDAL以外のコードがDALによって作成されたメモリを削除するのですか? – ng5000
いいえ、あなたが書いたものをあなたが書き込んだのであれば、メモリは "できました"ということができます。あなたは非常に奇妙に見える..しかしそれを行うには、 "削除&myCar;"を呼び出す必要があります。 – Goz
スタックコピーは起こらないかもしれません。コンパイラと最適化によって、(N)RVOは#1と同等の動作をします。いずれにせよ、車が見つからないときに例外を投げることが必要である。 –