0

この抜粋は、Bjarne の本からのものです。

原則として、例外はスロー時にコピーされるため、ハンドラーは元の例外のコピーを保持します。実際、例外はキャッチされる前に数回コピーされる場合があります。したがって、コピーできない例外をスローすることはできません。

参照またはポインターによって例外をキャッチする場合、これは当てはまりません。私は正しいですか?ここでの作者は、スローされたオブジェクトが最初に内部的にコピーされ、そのコピーがハンドラー引数に渡され、ハンドラー引数が値渡しの場合に再びコピーされることを意味しますか

4

1 に答える 1

2

例外が値または参照によってキャッチされるかどうかに関係なく、それは依然としてオブジェクトのコピーです。Meyers の「より効果的な C++」の項目 12「例外のスローがパラメーターの受け渡しや仮想関数の呼び出しとどのように異なるかを理解する」を読むことをお勧めします。
catch ハンドラーが参照によってキャッチする場合でも、元のオブジェクトが破棄されている可能性があるため、参照はコピーでなければなりません。
ただし、ポインターによるキャッチにはコピーが含まれないことに注意してください。ただし、スローアーは、キャッチャーがポインターを取得する例外が破棄されていないことを確認する責任があります。ポインターによるキャッチはお勧めしません。これは、Meyers が一般的に常に参照によってキャッチすることを推奨している理由の 1 つにすぎません。

于 2012-04-14T23:15:33.657 に答える