我有一个异常类:
class MyException : public std::exception
{
public:
MyException( char* message )
: message_( message )
{
if( !message_ ) throw std::invalid_argument("message param must not be null");
}
};
在我的投掷位置:
try {
throw MyException( NULL );
}
catch( std::exception const& e ) {
std::cout << e.what();
}
(因为代码未编译,所以请忽略任何错误)
我想知道在构造函数中由于另一个抛出而导致自己抛出时会发生什么。我认为这是合法的,捕获将会捕获到 std::invalid_argument
,之前抛出的异常 (MyException
) 将被忽略或取消。
我设计的目的是在我的异常类中强制实施不变量。 message_
永远不应该为 NULL,并且我不想在我的 what()
重载中检查它是否为 null,所以我在构造函数中检查它们是否无效,如果无效就抛出异常。
这是正确的吗?还是行为有所不同?
const std::string& message
,这样就不是问题了吗? - AJG85std::runtime_error
(尽管我很想使用),因为它要求在构造期间形成完整的what()
字符串。我喜欢将该字符串处理推迟到调用what()
时,因此我使用std::exception
来实现这个目的。 - void.pointer