Pertimbangkan coretan kod berikut:
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete[] ptr; }
Adakah selamat untuk memadamkan penunjuk yang diperuntukkan sebagai batal* menggunakan padam[] operator?
Jawapan:
Memadamkan penunjuk melalui kekosongan* tidak ditakrifkan secara jelas oleh Piawaian C. Bahagian 5.3.5/3 menyatakan:
Dalam alternatif pertama (padam objek), jika jenis statik operan berbeza daripada jenis dinamiknya, jenis statik hendaklah menjadi kelas asas bagi jenis dinamik operan. dan jenis statik hendaklah mempunyai pemusnah maya atau tingkah laku tidak ditentukan. Dalam alternatif kedua (tatasusunan padam), jika jenis dinamik objek yang akan dipadamkan berbeza daripada jenis statiknya, tingkah laku itu tidak ditentukan.
Selain itu, nota kaki mencatatkan:
Ini membayangkan bahawa objek tidak boleh dipadam menggunakan penunjuk jenis void* kerana tiada objek jenis batal.
Kesimpulan:
Adalah tidak selamat untuk memadamkan penunjuk yang diperuntukkan sebagai kekosongan* menggunakan pengendali padam[]. Sentiasa hantar penuding kepada jenis asalnya sebelum pemadaman.
Atas ialah kandungan terperinci Adakah Memadam Penunjuk `void*` dengan `delete[]` Selamat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!