根据MSDN:
__leave语句更有效,因为它不会导致 堆栈展开。
据我所知,就是说:“这样一个常见的代码片段是危险的!”
struct A
{
int* p;
A() : p(new int) {}
~A() { delete p; }
};
void f()
{
__try
{
A a;
... // Doing somthing
if (the thing has gone bad) __leave;
... // Continue
}
__finally
{}
}
在C ++项目中完全避免__leave是最佳做法吗?
答案 0 :(得分:5)
http://msdn.microsoft.com/en-us/library/yb3kz605.aspx
表示:
对于C ++程序,应该使用C ++异常处理而不是结构化异常处理。有关更多信息,请参阅C ++语言参考中的异常处理。
编辑: 此外,通常不要使用编译器特定的功能。
答案 1 :(得分:2)
这取决于。 __try
/ __finally
是为Win32结构化异常处理而构建的,它与完全相同与C ++结构化异常处理相同。如果您正在编写Win32驱动程序,则必须使用Win32 SEH。如果没有,我会坚持使用C ++ EH。