ホームページ > バックエンド開発 > C++ > あなたの C コンパイラは「新しい」演算子の例外を正しく処理していますか?

あなたの C コンパイラは「新しい」演算子の例外を正しく処理していますか?

Linda Hamilton
リリース: 2024-11-19 05:33:02
オリジナル
837 人が閲覧しました

Does Your C   Compiler Correctly Handle `new` Operator Exceptions?

新しい例外のスロー: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート