例外をスローしてキャッチする従来の方法は、例外オブジェクトをスローし、参照 (通常はconst
参照) によってキャッチすることです。C++ 言語では、コンパイラが適切なコードを生成して例外オブジェクトを構築し、適切なタイミングで適切にクリーンアップする必要があります。
動的に割り当てられたオブジェクトへのポインターをスローすることは、決して良い考えではありません。例外を使用すると、エラー状態に直面したときに、より堅牢なコードを記述できるようになるはずです。従来の方法で例外オブジェクトをスローすると、適切な型を指定する catch 句によってキャッチされたcatch (...)
かどうか、または によって再スローされたかどうかにかかわらず、適切なタイミングで正しく破棄されることを確認できます。(唯一の例外は、まったくキャッチされない場合ですが、これはどのように見ても回復不可能な状況です。)
動的に割り当てられたオブジェクトへのポインターをスローする場合、例外をスローしたい時点でコール スタックがどのようなものであっても、正しいポインター型を指定し、適切なdelete
呼び出しを持つ catch ブロックがあることを確認する必要があります。catch (...)
そのブロックが例外を再スローしない限り、例外をキャッチしてはなりません。例外は、例外を正しく処理する別の catch ブロックによってキャッチされます。
事実上、これは、堅牢なコードの記述を容易にし、すべての状況で正しいコードの記述を非常に困難にする例外処理機能を採用したことを意味します。これは、この機能を想定していないクライアント コードのライブラリ コードとして機能することはほとんど不可能であるという問題を脇に置きます。