私はこのように定義された関数を持っています:
void doSomethingWithCustomer (const Customer &customer);
私の仲間の開発者の1人はそれを次のように呼びました:
Customer *customer = order.getCustomer();
doSomethingWithCustomer (*customer);
残念ながら、getCustomer
注文が顧客に関連付けられていない場合、メソッドはnullptrを返す可能性があります。nullptrを返す場合getCustomer
、アプリケーションは呼び出し時にクラッシュするのではdoSomethingWithCustomer
なく、顧客参照が使用される関数内でクラッシュします。
もちろん、これを書く正しい方法は、最初に顧客がnullptrでないことを確認してから、有効な顧客がいる場合は関数を呼び出すことです。通常、関数/メソッドに参照引数がある場合、関数自体が引数をチェックするのではなく、呼び出し元がその有効性をチェックすることを期待します(ここではそうではありませんでした)。
Visual Studio 2010(およびそれ以前のバージョン)は実際にポインターを渡すことで参照を渡すことを知っていますが、これはC++標準のどこかに示されているのではないかと思います。参照が常にポインターとして渡されると仮定できますか(個人的には、これに依存しませんが、それを知ることは興味深いです)?
Visual Studioに、参照を渡すときに、最初に自動的に逆参照し、呼び出し時にクラッシュする必要があることを伝えることはできますか?(デバッグバージョンでこれを行うだけで十分な場合があります)?