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
Lepaskan: 2024-11-27 19:46:11
asal
770 orang telah melayarinya

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;
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan