【问题标题】:Handling exceptions in C++/CLI在 C++/CLI 中处理异常
【发布时间】:2011-06-10 16:21:46
【问题描述】:

在非托管 C++ 中,当前的想法是始终通过 const 引用捕获异常。

我对托管 C++ 没有那么丰富的经验(尽管我正在掌握其中的差异),但我想知道,在这里捕获异常的最佳方法是什么?异常是否会被句柄捕获,即

try
{
}
catch( ExceptionType^ ex )
{
}

.. 如果是这样,是否有任何警告?

【问题讨论】:

  • 引用:Biggest mistake is assuming that it is similar to C++.

标签: exception visual-c++ c++-cli managed-c++


【解决方案1】:

对于处理托管代码异常,是的,这就是这样做的方法。

但是,如果您使用的是托管 C++,我想这是因为您需要与本机代码进行互操作(或者您只是一个受虐狂?抱歉,我不是托管 C++ 的粉丝),在这种情况下事情是更复杂。有关混合模式异常处理问题的一些背景信息,请参阅 here

【讨论】:

  • 与您不同,我确实欣赏 C++/CLI(这是它的正式名称),但我也不会在互操作场景之外使用它。您真的很少在 C++/CLI 世界中捕获 .NET 异常。但是,您应该捕获每个 C++ 异常并以 .NET 形式重新抛出它们。由于您在这种情况下抛出句柄,因此在必须捕获 .NET 异常时捕获句柄是合乎逻辑的。
  • 我的主要反对意见是假装它与真正的(即本机)C++ 互操作是如此简单。我敢肯定,对于互操作来说,有时它是必须的。没有互操作?只需使用 C#。
  • 我完全同意。但我不得不说,使用 C++/CLI 和 .NET 比使用 ATL 和 COM 愉快得多。可悲的事实是,在 windows 下没有什么是简单的。
【解决方案2】:

当您抛出托管异常时,除了通过垃圾收集句柄之外,没有其他方法可以捕获它。与 C++ 不同,托管代码对可以抛出和不能抛出的内容有更严格的规定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-04-27
    • 2011-09-11
    相关资源
    最近更新 更多