新しい例外のスロー: C 標準への準拠の調査
C 標準では、次の場合に新しい演算子が std::bad_alloc 例外をスローすることが義務付けられています。メモリの割り当てに失敗します。しかし、この点に関して、特定のコンパイラ、特に VC6 の動作について懸念が提起されています。
VC6: Breaking the Standard
噂を確認すると、VC6 は非対応です。 -準拠した動作。割り当てエラーが発生した場合、例外をスローする代わりに、0 (または NULL) 値を返します。この標準からの逸脱は、新しい呼び出しのたびに明示的な null チェックを必要とし、コードの美しさの問題を引き起こすため、開発者にとって潜在的な課題となります。
VC6 のカスタム回避策
VC6 でこの問題を軽減するために、Microsoft はカスタムの新しいハンドラーを含む回避策を提供しています。このソリューションは、例外処理によってデフォルトの動作を補完します。
新しい MSVC コンパイラーの変数の動作
バージョン 7.0 以降の MSVC コンパイラーでは、new の動作はより複雑です。これらのコンパイラは、nothrownew.obj オブジェクト ファイルへのリンクなどの特定のルールに基づいて、デフォルトでスロー動作または非スロー動作を行う場合があります。
MSVC 8.0 以降の一貫性
MSVC 8.0 (VS2005) のリリースでは、より一貫したアプローチが採用されました。このコンパイラは、nothrownew.obj に明示的にリンクされていない限り、デフォルトで常に新しい例外をスローします。
非スロー動作に std::nothrow を使用する
開発者は、新しい例外を明示的に要求できます。 std::nothrow パラメータを使用して例外をスローするのではなく、0 を返します。これにより、VC6 の動作用に作成された既存のコードとの下位互換性が可能になります。
これらのニュアンスを理解し、適切な回避策を実装することで、開発者は、使用するコンパイラに関係なく、C コードが標準に準拠していることを確認できます。
以上があなたの C コンパイラは「新しい」演算子の例外を正しく処理していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。