スタック上のオブジェクトのスコープを介してスローされた特定の例外のためにスタックが巻き戻されているため、デストラクタが呼び出されているときにデストラクタがいくつかの作業をスキップするようにしたいスタック上のオブジェクトがあります。
これで、スタック アイテムのスコープ内に try catch ブロックを追加し、問題の例外をキャッチして、スキップする作業を実行しないようにスタック オブジェクトに通知し、次のように例外を再スローすることができます。
RAII_Class pending;
try {
doSomeWorkThatMayThrowException();
} catch (exceptionToSkipPendingDtor &err) {
pending.notifySkipResourceRelease();
throw;
}
ただし、これを行うためのよりエレガントな方法があることを願っています。たとえば、次のように想像してください。
RAII_Class::~RAII_Class {
if (detectExceptionToSkipPendingDtorBeingThrown()) {
return;
}
releaseResource();
}