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 に答える