クラスコンストラクタから例外がスローされると、プログラムがクラッシュします。デバッグモードで実行中に、次のエラーが表示されます。「VirtualCtor.exeの0x74A2DB18で処理できない例外:Microsoft C++例外:メモリロケーション0x00000000の[rethrow]」リリースモードでもクラッシュします。これはスローが正確なキャッチハンドラを見つけず、std :: terminate()が呼び出されるためです。しかし、私はキャッチ(...)がこれを処理すべきであるという理解がありました。誰かがキャッチと一緒に使う必要があるハンドラーを私に知らせることはできますか?コンストラクタから例外がスローされたときにアプリケーションがクラッシュする
#include<iostream>
#include<exception>
using namespace std;
class MyClass
{
public:
MyClass() { cout << "Default Ctor" << endl;
throw; //runtime exception.
}
~MyClass()
{
cout << "Destructor called" << endl;
}
};
int main()
{
MyClass*vpt = nullptr;
try {
vpt = new MyClass;
}
catch (...) {
delete vpt;
cout << "Exception"<< endl;
}
return 0;
}
変更コードthrow bad_alloc();例外をキャッチし、コードはもはやクラッシュしませんが、関数/コンストラクタからthrowを呼び出すだけで何が起こるのか理解する必要があります。
ありがとうございました。
'throw;'式を指定しないで、現在アクティブな例外を再スローします。それは、 'catch'節の外で実行されるとき、またはそこから呼び出される関数が未定義の挙動を示す。 –
@IgorTandetnik:答えのセクションは下にあります。これはコメントセクションです。 –