有効なオブジェクトを受け取る必要がある場合 (つまり、呼び出し元に NULL を渡させたくない場合) は、絶対に boost::shared_ptr を使用しないでください。2番目の例は、「スマートポインター」への参照を渡します...詳細を無視すると、「車へのポインターへのポインター」です。これは参照であるため、shared_ptr オブジェクトを NULL にすることはできません....しかし、NULL 値 (つまり、「null」オブジェクトを指す) を持つことができないという意味ではありません。
スマートポインターへの参照が「より良い」と考える理由が正確にはわかりません-呼び出し元関数は既にスマートポインターを使用していますか?
「const」の意味については...次のような意味ですか
bool DAL::loadCar(int id, const Car& car) {}
? はいの場合、それは非生産的です。「car」が変更されないという事実をコンパイラに伝えます(ただし、おそらく変更したいでしょう!)。
それとも、関数を「const」にするつもりですか?
class DAL{
bool loadCar(int id, Car& car) const;
}
?
後者の場合、メソッド「loadCar」が DAL オブジェクトを変更しないことをコンパイラ/API ユーザーに伝えます。これが当てはまる場合は、そうすることをお勧めします。これにより、コンパイラの最適化が有効になるだけでなく、「コントラクト」(関数シグネチャ) で、関数が DAL を変更しないことを指定することをお勧めします。コードでこの暗黙の仮定を作成します (このようにして、これが真のままであることを確認し、将来、「DAL」オブジェクトを変更する方法で「loadCar」関数を変更する人がいないことを確認します)