Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `padam[]` Tahu Berapa Banyak Elemen untuk Dipadamkan daripada Tatasusunan?

Bagaimanakah `padam[]` Tahu Berapa Banyak Elemen untuk Dipadamkan daripada Tatasusunan?

Susan Sarandon
Susan Sarandonasal
2024-11-27 19:46:11765semak imbas

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

Bagaimanakah pemadaman[] Menghurai Array

Kod yang dimaksudkan:

void deleteForMe(int* pointer)
{
     delete[] pointer;
}

mempunyai tingkah laku yang tidak ditentukan jika penunjuk tidak menunjuk ke tatasusunan, kerana ia melakukan operasi padam[] secara membuta tuli. Walau bagaimanapun, apabila penuding merujuk tatasusunan, seperti dalam:

int main()
{
     int* arr = new int[5];
     deleteForMe(arr);
     return 0;
}

OS entah bagaimana tahu untuk hanya memadamkan elemen tatasusunan yang ditentukan dan tidak meneruskannya.

Kunci kepada tingkah laku ini terletak dalam akar sejarah C sebagai bahasa yang serasi C. Untuk mengelakkan membebankan pengaturcara yang tidak menggunakan tatasusunan dengan overhed yang tidak perlu, sintaks padam[] telah diperkenalkan.

Apabila peruntukan bukan tatasusunan dibuat, seperti:

Foo* foo = new Foo;

tiada tambahan overhed ditanggung untuk sokongan tatasusunan. Walau bagaimanapun, untuk peruntukan tatasusunan, overhed ini wujud. Untuk menunjukkan bahawa perpustakaan masa jalan harus menggunakan maklumat ini, pengaturcara mesti menentukan padam[] untuk penunjuk tatasusunan.

Oleh itu, pilihan antara padam dan padam[] adalah berdasarkan peruntukan khusus yang sedang dipadamkan. Ini membolehkan pengurusan memori yang lebih halus dan selaras dengan falsafah minimalisme C.

Atas ialah kandungan terperinci Bagaimanakah `padam[]` Tahu Berapa Banyak Elemen untuk Dipadamkan daripada Tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn