例外をスローしてキャッチする従来の方法は、例外オブジェクトをスローし、それを参照(通常はconst
参照)によってキャッチすることです。C ++言語では、例外オブジェクトを構築し、適切なタイミングで適切にクリーンアップするために、コンパイラーが適切なコードを生成する必要があります。
動的に割り当てられたオブジェクトへのポインタを投げることは決して良い考えではありません。例外は、エラー条件が発生した場合に、より堅牢なコードを記述できるようにするためのものです。通常の方法で例外オブジェクトをスローする場合、正しいタイプを指定するcatch節によってキャッチされるcatch (...)
かどうか、それが再度スローされるかどうかに関係なく、適切なときに正しく破棄されます。(唯一の例外は、まったく検出されない場合ですが、これはどのように見ても回復不可能な状況です。)
動的に割り当てられたオブジェクトへのポインターをスローする場合は、例外をスローしたい時点でコールスタックがどのように見えるかにかかわらず、正しいポインタータイプを指定し、適切なdelete
呼び出しを行うcatchブロックがあることを確認する必要があります。catch (...)
そのブロックが例外を再スローしない限り、例外はキャッチされないはずです。例外は、例外を正しく処理する別のキャッチブロックによってキャッチされます。
事実上、これは、堅牢なコードの記述を容易にし、あらゆる状況で正しいコードの記述を非常に困難にする例外処理機能を使用したことを意味します。これは、この機能を期待しないクライアントコードのライブラリコードとして機能することがほぼ不可能になるという問題を残しています。
throw gcnew
役に立つと思います。マネージコードで例外をキャッチする場合。誰かがそれについて私を訂正できますか?