4

根据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 是最佳实践吗?

4

2 回答 2

6

http://msdn.microsoft.com/en-us/library/yb3kz605.aspx

说:

对于 C++ 程序,应该使用 C++ 异常处理而不是结构化异常处理。有关详细信息,请参阅 C++ 语言参考中的异常处理。

编辑:另外,最好避免编译器特定的功能。

于 2013-09-16T01:24:05.540 回答
2

这取决于。 __try/__finally是为 Win32 结构化异常处理而构建的,这与 C++ 结构化异常处理不太一样。如果您正在编写 Win32 驱动程序,则必须使用 Win32 SEH。如果没有,我会坚持使用 C++ EH。

于 2013-09-16T01:31:36.200 回答