【发布时间】:2013-10-14 11:00:37
【问题描述】:
在混合代码 C++ 应用程序中捕获 std 和 System 异常的正确方法是什么?
喜欢这样吗?
try
{
// using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}
【问题讨论】:
在混合代码 C++ 应用程序中捕获 std 和 System 异常的正确方法是什么?
喜欢这样吗?
try
{
// using pure C++ and managed components
}
catch(std::exception exp)
{
}
catch(System::Exception sexp)
{
}
【问题讨论】:
通过引用捕获异常。托管异常的硬性要求,对于本机 C++ 异常是可选的,但仍然是一个好主意。只是拼写不同:
try {
// stuff
}
catch (std::exception& ex) {
}
catch (System::Exception^ ex) {
}
然而,包罗万象的异常处理几乎从来都不是一个好主意。
【讨论】:
通过引用捕获它们以避免对std::exception 的派生异常进行切片:
catch (std::exception &exp)
这样您就可以正确捕获所有派生异常。 (多态性)
【讨论】:
请阅读this MS-Blog-Post。 特别是它说:“一般来说,处理托管代码中的本机错误/异常更容易,相反......” 托管异常以 SEH-Exceptions 的形式到达本机部分,与托管异常相比,信息更少。
所以,不,您的代码 sn-p 不正确。
【讨论】: