无法捕获的自定义异常C++

Ben*_*rst 6 c++ macos shared-libraries custom-exceptions

这一直让我疯狂.

class ExceptionImpl;

/**
* Custom Exception.
*/
class Exception : public virtual std::exception
{
  public:
    Exception( const Exception& original );

    Exception( const std::string& message );

    virtual ~Exception( void ) throw( );

    virtual const char* what( void ) const throw( );

  private:
    const std::unique_ptr< ExceptionImpl > m_pimpl;
};
Run Code Online (Sandbox Code Playgroud)

我从库中抛出此自定义异常,如下所示

throw Exception( "Error message" );
Run Code Online (Sandbox Code Playgroud)

并在主要通道中捕获它

try
{
   regex pattern(R"(a*)");

   Id::set_pattern_validator(pattern);

   assert(false);
}
catch( Exception const& exception )
{
   assert(true);
}
Run Code Online (Sandbox Code Playgroud)

Id::set_pattern_validator是库的Id类中的静态方法和异常的来源.我已经尝试了一切可以捕获异常但它未能被捕获.

catch( Exception )

catch( std::exception )

catch( ... )

Nada!
Run Code Online (Sandbox Code Playgroud)

终端输出如下.

"在抛出'Exception'的实例后终止调用what():一旦设置,模式验证器就不能被改变.中止陷阱."

现在没有牺牲山羊我不知道接下来要尝试什么...任何提示/提示???

注意:如果我在main中抛出自定义异常我可以捕获它没问题.

使用GCC并支持C++ 0x的Mac OS X环境.

编辑:现在的解决方案是继续在基于Linux的系统(Fedora)上进行开发.我现在还不会接受答案.感谢大家的帮助.

Ben*_*igt 7

如果catch (...)(在同一个线程的封闭功能)不处理它,你的崩溃不是由造成抛出未捕获的异常毕竟.

(注意:有可能抛出异常并终止程序,即使它已被捕获.从​​析构函数中抛出或违反throws子句是两种方法发生.)

  • 最好去寻找那只山羊. (2认同)