C++ ライブラリへの PERL XS インターフェイスを作成しています。croak
ライブラリが例外をスローしたときに呼び出す必要があります。
例外ハンドラーで直接実行すると、呼び出しに期待されるように、キャッチされた例外のデストラクタへの呼び出しが失われlongjmp
ます。例外には解放されない文字列メンバーが含まれているため、これは重要です。
明らかな解決策はcroak
、例外がキャッチされた場合、次のように catch ブロックの後に実行することです。
bool do_croak = false;
try {
throw MyException();
} catch (MyException &e) {
do_croak = true;
}
if (do_croak)
croak(NULL);
しかし、私は疑問に思っています:キャッチされた例外のデストラクタを直前に明示的に呼び出すだけで十分でしょうlongjmp
か? このような:
try {
throw MyException();
} catch (MyException &e) {
e.~MyException();
croak(NULL);
}