The delete[]
operator yang digunakan untuk array hapus. The delete
operator yang digunakan untuk menghapus objek non-array. Itu panggilan operator delete[]
dan operator delete
fungsi masing-masing untuk menghapus memori bahwa array atau objek non-array ditempati setelah (akhirnya) memanggil destruktor untuk elemen-elemen array atau objek non-array.
Berikut ini menunjukkan hubungan:
typedef int array_type[1];
// create and destroy a int[1]
array_type *a = new array_type;
delete [] a;
// create and destroy an int
int *b = new int;
delete b;
// create and destroy an int[1]
int *c = new int[1];
delete[] c;
// create and destroy an int[1][2]
int (*d)[2] = new int[1][2];
delete [] d;
Untuk new
yang menciptakan array (jadi, apakah itu new type[]
atau new
diterapkan pada konstruksi tipe array), Standar mencari sebuah operator new[]
di kelas tipe elemen array atau dalam lingkup global, dan melewati jumlah memori yang diminta. Mungkin meminta lebih dari N * sizeof(ElementType)
jika ia ingin (misalnya untuk menyimpan jumlah elemen, jadi nanti ketika menghapus tahu berapa banyak panggilan destruktor yang harus dilakukan). Jika kelas menyatakan operator new[]
bahwa tambahan untuk jumlah memori menerima yang lain size_t
, parameter kedua itu akan menerima jumlah elemen yang dialokasikan - ia dapat menggunakan ini untuk tujuan apa pun yang diinginkan (debugging, dll ...).
Untuk new
yang membuat objek non-array, ia akan mencari operator new
di dalam elemen elemen atau dalam lingkup global. Itu melewati jumlah memori yang diminta ( sizeof(T)
selalu selalu).
Untuk delete[]
itu, ia melihat ke tipe kelas elemen array dan memanggil destruktor mereka. The operator delete[]
fungsi yang digunakan adalah satu di kelas jenis elemen, atau jika tidak ada maka dalam lingkup global.
Untuk delete
, jika pointer yang lewat adalah kelas dasar dari jenis objek yang sebenarnya, kelas dasar harus memiliki destruktor virtual (jika tidak, perilaku tidak terdefinisi). Jika itu bukan kelas dasar, maka destruktor dari kelas itu disebut, dan operator delete
di kelas itu atau global operator delete
digunakan. Jika kelas dasar disahkan, maka destruktor tipe objek aktual disebut, dan operator delete
ditemukan di kelas itu digunakan, atau jika tidak ada, global operator delete
disebut. Jika operator delete
di dalam kelas memiliki parameter tipe kedua size_t
, ia akan menerima jumlah elemen untuk dialokasikan ulang.