クラス A のコンストラクターからスローされた次の例外が 2 回キャッチされるのはなぜですか? 1 回目はコンストラクター自体のキャッチで、2 回目はメイン関数のキャッチでキャッチされます。
コンストラクター内の catch で一度だけキャッチされないのはなぜですか?
#include <iostream>
using namespace std;
class E {
public:
const char* error;
E(const char* arg) : error(arg) { }
};
class A {
public:
int i;
A() try : i(0) {
throw E("Exception thrown in A()");
}
catch (E& e) {
cout << e.error << endl;
}
};
int main() {
try {
A x;
}
catch(...)
{
cout << "Exception caught" << endl;
}
}
メイン関数の try-catch ブロックを削除すると、プログラムがクラッシュします。出力は次のとおりです。
Exception thrown in A()
terminate called after throwing an instance of 'E'
zsh: abort (core dumped) ./main
メイン関数に try-catch ブロックがないとクラッシュするのはなぜですか?