ホームページ > バックエンド開発 > C++ > `delete[]` は配列から削除する要素の数をどのようにして知るのでしょうか?

`delete[]` は配列から削除する要素の数をどのようにして知るのでしょうか?

Susan Sarandon
リリース: 2024-11-27 19:46:11
オリジナル
749 人が閲覧しました

How Does `delete[]` Know How Many Elements to Delete from an Array?

delete[] はどのように配列を解読しますか

問題のコード:

void deleteForMe(int* pointer)
{
     delete[] pointer;
}
ログイン後にコピー

ポインターが指していない場合の動作は未定義ですdelete[] 操作を盲目的に実行するため、配列になります。ただし、

int main()
{
     int* arr = new int[5];
     deleteForMe(arr);
     return 0;
}
ログイン後にコピー

のようにポインタが配列を参照する場合、OS はどういうわけか、指定された配列要素のみを削除し、それ以降は続行しないことを認識します。

この動作の鍵は次のとおりです。 C 互換言語としての C の歴史的ルーツにあります。配列を使用しないプログラマに不必要なオーバーヘッドの負担を与えないよう、delete[] 構文が導入されました。

次のような非配列割り当てが行われる場合、

Foo* foo = new Foo;
ログイン後にコピー

追加は不要です。配列のサポートにはオーバーヘッドが発生します。ただし、配列割り当ての場合、このオーバーヘッドは存在します。ランタイム ライブラリがこの情報を使用する必要があることを示すには、プログラマは配列ポインタに delete[] を指定する必要があります。

したがって、delete と delete[] の選択は、削除される特定の割り当てに基づいて行われます。これにより、よりきめ細かいメモリ管理が可能になり、C のミニマリズムの哲学と一致します。

以上が`delete[]` は配列から削除する要素の数をどのようにして知るのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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