【问题标题】:Consequences of using Structured Exception Handling (SEH)?使用结构化异常处理 (SEH) 的后果?
【发布时间】:2011-02-19 21:10:35
【问题描述】:

我看到 Doug Harrison 很好地说明了使用(即捕获)结构化异常的“错误”(参见 question #3)。但是还有什么其他后果?例如,如果我有几个使用 /eha 编译的项目,与其他使用 /ehs 编译的项目混合,会发生什么情况?当库相互链接(编译时或运行时)时是否存在问题?

但这只是一个例子。可能还有什么其他问题?

【问题讨论】:

    标签: c++ seh structured-exception


    【解决方案1】:

    /EHa 禁用优化。在 /EH 生效的情况下,如果编译器可以确定包装在 try {} 中的代码不会引发任何 C++ 异常,则编译器可以省略异常过滤器。这是 x86 和 x64 上的小空间优化,x86 上非常小的时间优化。问题是,如果您捕获非 C++ 异常,则需要这些过滤器。结果是,当捕获到此类异常时,堆栈将展开,而 没有调用 C++ 对象的析构函数。不好,/EHa 避免了。

    混合不会导致链接器问题。导致上述问题。

    是的,/EHa 还让 catch(...) 做了一件非常愚蠢的事情,它真的可以捕获所有内容。不过,那艘沉船不久前航行了,Pokemon C++ 异常处理也是个坏主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多