Setiap kali seseorang mengajukan pertanyaan tentang delete[]
di sini, selalu ada pertanyaan yang cukup umum, begitulah cara C++ melakukannya, gunakan jenis respons delete[]
. Berasal dari latar belakang vanilla C, apa yang saya tidak mengerti adalah mengapa perlu ada pemanggilan yang berbeda sama sekali.
Dengan malloc()
/free()
pilihan Anda adalah mendapatkan penunjuk ke blok memori yang berdekatan dan mengosongkan blok memori yang berdekatan. Sesuatu di bidang implementasi datang dan mengetahui ukuran blok yang Anda alokasikan berdasarkan alamat dasar, ketika Anda harus mengosongkannya.
Tidak ada fungsi free_array()
. Saya telah melihat beberapa teori gila tentang pertanyaan lain yang terkait dengan hal ini, seperti memanggil delete ptr
hanya akan membebaskan bagian atas array, bukan seluruh array. Atau lebih tepatnya, tidak ditentukan oleh implementasinya. Dan tentu saja... jika ini adalah versi pertama C++ dan Anda membuat pilihan desain yang aneh, itu masuk akal. Tapi kenapa dengan standar C++ $PRESENT_YEAR
belum kelebihan beban???
Tampaknya ini adalah satu-satunya bit tambahan yang ditambahkan C++ melalui array dan memanggil destruktor, dan saya pikir mungkin ini adalah inti dari itu, dan secara harfiah menggunakan fungsi terpisah untuk menyelamatkan kita dari pencarian panjang runtime tunggal, atau nullptr
di akhir daftar dengan imbalan menyiksa setiap pemrogram C++ baru atau pemrogram yang mengalami hari yang tidak jelas dan lupa bahwa ada kata cadangan yang berbeda.
Bisakah seseorang mengklarifikasi sekali dan untuk selamanya jika ada alasan selain itu yang dikatakan standar dan tidak ada yang mempertanyakannya?