在这种情况下,我必须基于抛出的异常执行一些操作,然后重新抛出异常。是否建议这样做-我的目标是根据引发的异常进行一些工作,然后重新引发异常,使应用程序崩溃并生成具有异常中的调用堆栈的转储。

class Foo
{
public:

void HandleException(const std::exception& ex)
{
    // Log, report some metrics
    throw;
}

void Work(//Some inputs)
{
     try
     {
          // trying doing some work
     }
     catch (const std::exception& ex)
     {
          // This is really an exceptional situation, and the exception should be thrown which
          // cause the exe to abort and create dump.
          // Intention is to preserve call stack and have it in dump.
          HandleException(ex);
     }
}
}


让我为问题添加另一个说明:当我将HandleException作为lambda函数时,将lambda引发会导致异常。我是否需要捕获某些状态,该怎么做?

最佳答案

捕获异常时,有两种选择:


以某种方式实现原始目标(合同),例如通过重试。
通过抛出报告失败。


重新抛出原始异常是实现第二个要点的一种方法。

关于c++ - 从catch块中的功能上抛出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26579116/

10-13 03:39