operator delete (C++)
Membatalkan alokasi blok memori.
Sintaks
[
::
]delete
cast-expression
[::
]delete []
cast-expression
Keterangan
Argumen cast-expression harus berupa pointer ke blok memori yang sebelumnya dialokasikan untuk objek yang dibuat dengan operator baru. Operator delete
memiliki hasil dari jenis void
dan karena itu tidak mengembalikan nilai. Contohnya:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
Menggunakan delete
pada pointer ke objek yang tidak dialokasikan dengan new
memberikan hasil yang tidak dapat diprediksi. Namun, Anda dapat menggunakan delete
pada pointer dengan nilai 0. Ketentuan ini berarti bahwa, ketika new
mengembalikan 0 pada kegagalan, menghapus hasil operasi yang gagal new
tidak berbahaya. Untuk informasi selengkapnya, lihat Operator baru dan hapus.
Operator new
dan delete
juga dapat digunakan untuk jenis bawaan, termasuk array. Jika pointer
mengacu pada array, tempatkan tanda kurung kosong ([]
) sebelum pointer
:
int* set = new int[100];
//use set[]
delete [] set;
delete
Menggunakan operator pada objek membatalkan alokasi memorinya. Program yang mendereferensikan pointer setelah objek dihapus dapat memiliki hasil atau crash yang tidak dapat diprediksi.
Ketika delete
digunakan untuk membatalkan alokasi memori untuk objek kelas C++, destruktor objek dipanggil sebelum memori objek dibatalkan alokasinya (jika objek memiliki destruktor).
Jika operan ke delete
operator adalah nilai l yang dapat dimodifikasi, nilainya tidak ditentukan setelah objek dihapus.
Jika opsi pengkompilasi /sdl (Aktifkan pemeriksaan keamanan tambahan) ditentukan, operand ke delete
operator diatur ke nilai yang tidak valid setelah objek dihapus.
Menggunakan hapus
Ada dua varian syntactic untuk operator penghapusan: satu untuk objek tunggal dan yang lainnya untuk array objek. Fragmen kode berikut menunjukkan perbedaannya:
// expre_Using_delete.cpp
struct UDType
{
};
int main()
{
// Allocate a user-defined object, UDObject, and an object
// of type double on the free store using the
// new operator.
UDType *UDObject = new UDType;
double *dObject = new double;
// Delete the two objects.
delete UDObject;
delete dObject;
// Allocate an array of user-defined objects on the
// free store using the new operator.
UDType (*UDArr)[7] = new UDType[5][7];
// Use the array syntax to delete the array of objects.
delete [] UDArr;
}
Dua kasus berikut menghasilkan hasil yang tidak terdefinisi: menggunakan bentuk array penghapusan (delete []
) pada objek, dan menggunakan bentuk penghapusan nonarray pada array.
Contoh
Untuk contoh penggunaan delete
, lihat operator baru.
Cara kerja penghapusan
Operator penghapusan memanggil penghapusan operator fungsi.
Untuk objek yang bukan tipe kelas (kelas, struct, atau union), operator penghapusan global dipanggil. Untuk objek jenis kelas, nama fungsi dealokasi diselesaikan dalam cakupan global jika ekspresi penghapusan dimulai dengan operator resolusi cakupan unary (::
). Jika tidak, operator penghapusan memanggil destruktor untuk objek sebelum membatalkan alokasi memori (jika pointer tidak null). Operator penghapusan dapat didefinisikan per kelas; jika tidak ada definisi seperti itu untuk kelas tertentu, penghapusan operator global dipanggil. Jika ekspresi penghapusan digunakan untuk membatalkan alokasi objek kelas yang jenis statisnya memiliki destruktor virtual, fungsi dealokasi diselesaikan melalui destruktor virtual dari jenis dinamis objek.
Baca juga
Ekspresi dengan Operator Tunggal
Kata kunci
Operator baru dan hapus
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk