Destruktor dan Pembersihan
Lepaskan sumber daya secara otomatis
Destruktor dan Pembersihan adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Fungsi Destruktor
Destruktor dijalankan saat masa hidup objek berakhir. Tugasnya adalah membebaskan apa pun yang dimiliki objek tersebut. Namanya adalah ~ClassName.
#include <iostream>
class File {
public:
~File() { std::cout << "closing file\n"; }
};
int main() {
File f;
} // ~File runs hereMembebaskan Memori yang Dimiliki
Jika sebuah kelas memiliki memori dinamis, destruktornya harus membebaskannya. Inilah tempat klasik untuk memanggil delete.
#include <iostream>
class Buffer {
int* data;
public:
Buffer(int n) : data(new int[n]) {}
~Buffer() { delete[] data; } // cleanup
};
int main() { Buffer b(10); }Destruktor Berjalan Otomatis
Anda tidak perlu memanggil destruktor sendiri untuk objek tumpukan—kompiler menyisipkan pemanggilannya di akhir lingkup.
Urutan Kebalikan Anggota
Objek anggota dihancurkan dalam urutan kebalikan dari deklarasinya, setelah isi destruktor dijalankan.
#include <iostream>
struct A { ~A() { std::cout << "~A\n"; } };
struct B { ~B() { std::cout << "~B\n"; } };
struct C {
A a;
B b; // destroyed before a
~C() { std::cout << "~C\n"; }
};
int main() { C c; }Destruktor Virtual
Jika Anda menghapus objek turunan melalui pointer kelas dasar, destruktor kelas dasar harus virtual—jika tidak, bagian turunan akan bocor.
#include <iostream>
struct Base {
virtual ~Base() { std::cout << "~Base\n"; }
};
struct Derived : Base {
~Derived() override { std::cout << "~Derived\n"; }
};
int main() {
Base* p = new Derived();
delete p; // both run thanks to virtual
}Destruktor Sebaiknya Tidak Melempar Pengecualian
Melempar pengecualian dari destruktor saat tumpukan sedang diurai akan menghentikan program. Destruktor sebaiknya ditandai (secara implisit) sebagai noexcept dan tidak pernah membiarkan pengecualian keluar.
Destruktor Bawaan
Jika Anda tidak menulisnya, kompiler akan membuat destruktor yang menghancurkan setiap anggota. Untuk kelas yang hanya memiliki anggota RAII, itulah yang tepat.
#include <string>
#include <vector>
struct Record {
std::string name; // self-cleaning
std::vector<int> values; // self-cleaning
}; // default destructor is enoughDestruktor = default
Tulis ~Class() = default; untuk secara eksplisit meminta destruktor yang dibuat kompiler—berguna saat Anda memerlukan destruktor virtual tetapi tidak memerlukan logika khusus.
#include <iostream>
struct Shape {
virtual ~Shape() = default; // virtual + default
};Membebaskan Sumber Daya Non-Memori
Destruktor juga menutup berkas, melepaskan kunci, dan memutuskan soket—bukan hanya membebaskan memori. Setiap sumber daya yang diperoleh harus ditangani di sini.
Urutan Antarobjek
Beberapa variabel lokal dihancurkan dalam urutan kebalikan dari konstruksinya, sehingga destruktor dapat menggunakan objek yang dibuat sebelumnya dengan aman.
Biarkan Anggota RAII Bekerja
Jika setiap anggota merupakan tipe RAII, sering kali Anda sama sekali tidak memerlukan destruktor khusus. Simpan destruktor yang ditulis tangan untuk sumber daya mentah.
Pemeriksaan Singkat
Uji pemahaman Anda tentang destruktor.
Rangkuman
Anda telah mempelajari bahwa destruktor secara otomatis membebaskan sumber daya yang dimiliki pada akhir masa hidup, menjalankan penghancuran anggota dalam urutan kebalikan deklarasi, tidak boleh melempar pengecualian, dan harus berupa virtual dalam kelas dasar polimorfik. Anggota RAII sering kali membuat destruktor khusus tidak diperlukan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Destruktor dan Pembersihan” gratis?
Ya — teks lengkap “Destruktor dan Pembersihan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Destruktor dan Pembersihan”?
Lepaskan sumber daya secara otomatis Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Destruktor dan Pembersihan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Prinsip RAII
- Destruktor dan Pembersihan
- Aturan Tiga/Lima
- Guard Scope