在混合代码C ++应用程序中捕获std和System异常的正确方法是什么?
像这样?try
{
// using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}
答案 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的形式到达本机部分,信息减少。
所以,不,你的代码片段不正确。