如果我在非托管 C++、Visual Studio 2008 或更高版本中创建一个新项目,我想使用哪种异常处理模型?
我知道 /EHa 选项会导致代码效率降低,并且还会捕获 SEH 异常,对吗?
因此,我一直在避开该选项,并且通常使用 /EHsc,因此我只在 catch(...) 处理程序中捕获实际抛出的 C++ 异常,而不是捕获访问冲突和其他结构化异常。如果我的代码中存在访问冲突,我不希望它被 catch(...) {} 掩盖。
我与其他希望 catch(...) {} 什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦啦啦!” 这样您就不必让程序崩溃?事实上,如果代码现在因为编码错误而处于不良状态,您真的希望代码继续吗?
所以我的一般想法是 /EHa 创建更大/更慢的代码,它允许程序员编写代码,如果存在致命错误,它将继续在未定义状态下运行。
顺便说一句,我说的是应用程序和服务代码,这是我们大部分时间编写的内容。不是低级设备驱动程序或类似的东西。
请权衡你的想法。