У меня есть объект в стеке, для которого я хотел бы, чтобы его деструктор пропустил некоторую работу, когда вызывается деструктор, потому что стек разматывается из-за определенного исключения, выбрасываемого через область объекта в стеке.1001 *
Теперь я могу добавить блок try catch внутри области действия элемента стека, перехватить рассматриваемое исключение и уведомить объект стека, чтобы он не выполнял пропускаемую работу, а затем повторно выдать исключение следующим образом:
RAII_Class pending;
try {
doSomeWorkThatMayThrowException();
} catch (exceptionToSkipPendingDtor &err) {
pending.notifySkipResourceRelease();
throw;
}
Однако я надеюсь, что есть более элегантный способ сделать это.Например, представьте:
RAII_Class::~RAII_Class {
if (detectExceptionToSkipPendingDtorBeingThrown()) {
return;
}
releaseResource();
}