3

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

像这样?

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

3 回答 3

6

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

try {
    // stuff
}
catch (std::exception& ex) {
}
catch (System::Exception^ ex) {
}

然而,Catch-them-all 异常处理几乎从来都不是一个好主意。

于 2013-10-14T11:52:49.947 回答
2

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

catch (std::exception &exp)

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

于 2013-10-14T11:10:21.373 回答
2

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

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

于 2013-10-14T11:18:56.477 回答