C++でthrow;
を実行すると、キャッチブロック内で現在キャッチされた例外がブロック外に再発行されます。それはアウトですのでポインタまたは値を投げるスローを行うとどうなりますか?文はcatchブロックの外で実行されますか?
try {
CodeThatMightThrow();
} catch(...) {
ExceptionHandler();
}
void ExceptionHandler()
{
try {
throw;
} catch(FileException* e) {
//do handling with some complex logic
delete e;
} catch(GenericException* e) {
//do handling with other complex logic
delete e;
}
}
はどんな違いがありません:例外ディスパッチャのアイデアは、多くの場合、複雑な例外処理を使用するときにコードの重複を削減するソリューションとして育てているthis answerで
問題の
ExceptionHandler()がcatchブロックから呼び出されないとどうなりますか?
int main(int, char**)
{
try {
throw;
} catch(...) {
MessageBox(0, "", "", 0);
}
return 0;
}
まずそれが初回例外を示すために、デバッガが発生し、その後すぐに未処理の例外:
私はVC7でこのコードを試してみました。このコードをデバッガの外で実行すると、abort()が呼び出されたときと同じようにプログラムがクラッシュします。このような状況で予想される動作は何ですか?規格から
これはWindowsとは関係がないため(ただし、良い質問です)、「ウィンドウ」タグを削除しました。 –