我有一个异常类:
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();
}
(代码未编译,如有错误请见谅)
我想知道当我在构造时由于另一个抛出而从构造函数中抛出会发生什么。我认为这是合法的,并且 catch 最终会捕获 a std::invalid_argument
,并且之前抛出的异常 ( MyException
) 将被忽略或取消。
这种设计的目标是在我的异常类中强制执行不变量。message_
永远不应该为 NULL,我不想在我的what()
重载中使用 if 条件来检查它是否为 null,所以我在构造函数中检查它们,如果它们无效则抛出。
这是正确的,还是行为不同?