我在堆栈上有一个对象,我希望它的析构函数在调用析构函数时跳过一些工作,因为由于堆栈上对象的范围引发了特定异常,堆栈正在展开。
现在我可以在堆栈项的范围内添加一个 try catch 块并捕获有问题的异常并通知堆栈对象不运行要跳过的工作,然后重新抛出异常,如下所示:
RAII_Class pending;
try {
doSomeWorkThatMayThrowException();
} catch (exceptionToSkipPendingDtor &err) {
pending.notifySkipResourceRelease();
throw;
}
但是,我希望有一种更优雅的方式来做到这一点。例如想象:
RAII_Class::~RAII_Class {
if (detectExceptionToSkipPendingDtorBeingThrown()) {
return;
}
releaseResource();
}