27

または使用するのは適切ですthrow new FoobarException(Baz argument);throw FoobarException(Baz argument);

キャッチするときは常にcatch(FoobarException& e)「念のため」を使用しますが、C ++で new を使用する必要があるかどうか(Javaは間違いなく)、またはそれがプログラマーの好みであるかどうかについて、確固たる答えを見つけることができませんでした。

4

2 に答える 2

34

C++ の例外は、値によってスローされ、参照によってキャッチされる必要があります。

したがって、これが適切な方法です。

try
{
    throw FoobarException(argument);
}
catch( const FoobarException &ex )
{
    cout << ex.what() << endl;
}

new で作成された例外をスローしないでください。削除の責任者が明確に定義されていないためです。さらに、エラー処理中に割り当てを実行すると、別の例外がスローされ、元の問題がわかりにくくなる可能性があります。

const 参照でキャッチする必要はありません (非 const は問題なく動作します) が、とにかくそれを行うのが好きです。ただし、例外をポリモーフィックにキャッチするには、常に (値ではなく) 参照する必要があります。そうしないと、例外のタイプがスライスされる可能性があります。

于 2011-07-23T16:41:36.833 に答える
8

特別な要件がない限り、私は常に値でスローし、const参照でキャッチします。これは、newそれ自体が例外をスローする可能性があるためです。エラー処理中は、例外を引き起こす可能性のあるものを避けるのが最善です。

于 2011-07-23T16:43:13.630 に答える