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)上进行开发.我现在还不会接受答案.感谢大家的帮助.
如果catch (...)(在同一个线程的封闭功能)不处理它,你的崩溃不是由造成抛出未捕获的异常毕竟.
(注意:有可能抛出异常并终止程序,即使它已被捕获.从析构函数中抛出或违反throws子句是两种方法发生.)