私は次のようなコードを持っています
try {
doSomething();
} catch(InterruptException) {
goto rewind_code;
}
if(0) {
rewind_code:
longjmp(savepoint, 1);
}
私の質問は、C ++ランタイムによって保存される例外オブジェクトはgoto
、catchブロックから出たときに解放されますか?または、ランタイムは、周囲の関数またはそのようなものが存在するまで、それをキャッシュすることを許可されていますか?上記のコードを複数回実行する場合、巻き戻しコードを取得するたびに、メモリがリークしないようにしたいだけです(longjmp
コンパイラによって生成されたクリーンアップコードが関数プロローグ内またはその前に実行されないため)。