【发布时间】:2013-09-28 14:31:06
【问题描述】:
是否可以让析构函数捕获异常然后重新抛出它们?
如果是这样,我该怎么做,因为try 声明没有明确的位置?
基本上,我想理想地做:
CMyObject::~CMyObject()
{
catch(...) // Catch without a try. Possible?
{
LogSomeInfo();
throw; // re-throw the same exception
}
// Normal Destructor operations
}
背景
我有一个大型、复杂的应用程序,它在某处抛出未处理的异常。
我无法轻松访问 main 或顶级消息泵或类似的东西,因此没有容易的地方来捕获所有未处理的异常。
我认为任何未处理的异常都必须在堆栈展开时通过一堆析构函数。所以,我正在考虑在析构函数中分散一堆catch 语句。然后至少我会知道抛出异常时有哪些对象在起作用。但我不知道这是否可行或可取。
【问题讨论】:
-
您也许可以使用function try block,但说真的,不要这样做。你永远不应该编写一个抛出的析构函数。
-
哦,您想首先捕获导致堆栈展开的异常吗?
-
投票关闭 Dup 的人显然没有阅读问题:我希望在析构函数中 CATCH,而不是 throw。
-
@abelenky:实际上,您并不是要捕捉,而是要在异常展开期间执行一些额外的处理。
-
@abelenky 我编辑了我的答案并进行了一些重要的改进。
标签: c++ exception destructor