在混合C ++中捕获std异常和系统异常

时间:2013-10-14 11:00:37

标签: c++ exception clr

在混合代码C ++应用程序中捕获std和System异常的正确方法是什么?

像这样?

try
{
    // using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}

3 个答案:

答案 0 :(得分:6)

通过引用捕获异常。对托管异常的硬性要求,对于本机C ++异常是可选的,但仍然是个好主意。它的拼写方式不同:

try {
    // stuff
}
catch (std::exception& ex) {
}
catch (System::Exception^ ex) {
}
然而,抓住他们所有的异常处理几乎都不是一个好主意。

答案 1 :(得分:2)

通过引用捕获它们以避免对std::exception的派生异常进行切片:

catch (std::exception &exp)

这样您就可以正确捕获所有派生的异常。 (多态性)

答案 2 :(得分:2)

请阅读this MS-Blog-Post。 特别是它说:“一般来说,在托管代码中处理本机错误/异常更容易,反之亦然......” 与托管的ecxeptions相比,托管异常以SEH-Exceptions的形式到达本机部分,信息减少。

所以,不,你的代码片段不正确。