operator delete (C++)

Membatalkan alokasi blok memori.

Sintaks

[::] deletecast-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