または使用するのは適切ですthrow new FoobarException(Baz argument);
かthrow FoobarException(Baz argument);
?
キャッチするときは常にcatch(FoobarException& e)
「念のため」を使用しますが、C ++で new を使用する必要があるかどうか(Javaは間違いなく)、またはそれがプログラマーの好みであるかどうかについて、確固たる答えを見つけることができませんでした。
C++ の例外は、値によってスローされ、参照によってキャッチされる必要があります。
したがって、これが適切な方法です。
try
{
throw FoobarException(argument);
}
catch( const FoobarException &ex )
{
cout << ex.what() << endl;
}
new で作成された例外をスローしないでください。削除の責任者が明確に定義されていないためです。さらに、エラー処理中に割り当てを実行すると、別の例外がスローされ、元の問題がわかりにくくなる可能性があります。
const 参照でキャッチする必要はありません (非 const は問題なく動作します) が、とにかくそれを行うのが好きです。ただし、例外をポリモーフィックにキャッチするには、常に (値ではなく) 参照する必要があります。そうしないと、例外のタイプがスライスされる可能性があります。
特別な要件がない限り、私は常に値でスローし、const
参照でキャッチします。これは、new
それ自体が例外をスローする可能性があるためです。エラー処理中は、例外を引き起こす可能性のあるものを避けるのが最善です。