我有第三方静态库Enable C++ Exceptions
set to No (/EH
未指定标志)。从启用了 C++ 异常的代码中调用它会产生什么后果(/EHa
)?如果从库内部抛出结构化异常,主应用程序提供给 _set_se_translator 的函数是否会被可靠地调用? (我的实验表明它会,但只是想知道这是否是定义的行为)。
混合时还有其他注意事项吗/EH
异常处理模型?
Calling into未启用异常的代码不应产生任何问题——这与调用外部 C 函数或类似性质的函数没有什么不同。
Calling from未启用异常的代码(进入启用异常的代码)可能不会在禁用异常的代码中包含正确的堆栈展开语义,这意味着您将破坏该代码的不变量,除非它是专门设计用于处理异常的。 (例如,某些库(例如 ANTLR)在一个块中分配所有内存,并让用户代码立即释放所有内容,允许使用异常而不会泄漏,即使它们本身不使用异常)。
陈雷蒙德 http://blogs.msdn.com/b/oldnewthing/archive/2010/07/30/10044061.aspx有一篇文章详细介绍了 C++ 的异常处理如何在 MSVC++ 上工作。长话短说,它构建在 Windows 的 SEH 之上。因此,它的行为应该类似于在例如中抛出 SEH 异常时发生的情况。 C代码。 (不过,我自己没有验证过)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)