class MyExceptionBase {};
class MyExceptionDerived : public MyExceptionBase { };
void f(MyExceptionBase& e)
{
// ... throw e;
}
void g()
{
MyExceptionDerived e;
try{
f(e);
}
catch (MyExceptionDerived& e)
{
...code to handle MyExceptionDerived...
}
catch (...)
{
...code to handle other exceptions...
}
}
如果你尝试这个,在你输入catch(...)子句的运行时,而不是你的catch(MyExceptionDerived&)子句,发生了什么?
答案 0 :(得分:0)
throw
概念性地抛出异常对象的副本。由于您正在使用函数f()
,因此您正在切换MyExceptionBase
的副本并将其抛出。
注意:始终从std::runtime_error
或std::logic_error
派生您的例外基础。