ホームページ  >  記事  >  バックエンド開発  >  C で「delete」を実行するとポインタが自動的に NULL に設定されないのはなぜですか?

C で「delete」を実行するとポインタが自動的に NULL に設定されないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-24 22:00:18468ブラウズ

Why Doesn't `delete` Automatically Set Pointers to NULL in C  ?

削除でポインターに NULL が自動的に割り当てられないのはなぜですか?

C 言語標準では、ポインター値の NULL への自動設定は義務付けられていません。削除演算子を呼び出した後。これは直観に反するように思えるかもしれませんが、この決定にはいくつかの理由があります。

パフォーマンス

質問で述べたように、ポインターを NULL に設定する追加の命令は潜在的に可能性があります。特にパフォーマンスが重要なコードにおいて、削除操作のパフォーマンスに影響を与えます。

Const Pointers

もう 1 つの潜在的な問題は、一部のポインターが const として宣言される可能性があることです。これらのポインターの場合、削除操作後に値を変更しようとすることはできません。このようなポインターについては特別なケースを作成できるという議論もあるかもしれませんが、標準では、すべての場合においてポインター値を変更しないことで一貫性を維持することを選択しました。

非左辺値引数

削除演算子は、右辺値参照などの非左辺値引数を受け入れることができます。これらのシナリオでは、ポインターの値を変更することはできません。これは、すべての引数型の動作の一貫性を確保するために、標準に技術的な制限を課します。

Bjarne Stroustrup の説明

C の作成者である Bjarne Stroustrup がこれに対処しました。問題:

  • 彼は、実装に自動的に実行する機能が含まれることを期待していました。
  • ただし、delete の引数は必ずしも左辺値であるとは限らず、この動作の標準化には技術的な困難が伴うと彼は強調しています。

したがって、C でポインターを削除しても自動的に NULL に設定されませんが、標準ではパフォーマンス、const ポインター、非左辺値引数、およびこの決定に到達するための一貫性。

以上がC で「delete」を実行するとポインタが自動的に NULL に設定されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。