Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `padam[]` Tahu Berapa Banyak Elemen untuk Dipadamkan daripada Tatasusunan?
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!