Prinsip RAII
Kaitkan sumber daya dengan masa hidup objek
Prinsip RAII adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Arti RAII
RAII adalah singkatan dari Resource Acquisition Is Initialization. Sumber daya diperoleh dalam konstruktor dan dibebaskan dalam destruktor, sehingga masa hidupnya terikat pada suatu objek.
Gagasan Inti
Bungkus setiap sumber daya—memori, berkas, kunci, dan soket—dalam sebuah objek. Saat objek keluar dari lingkup, destruktornya membebaskan sumber daya tersebut secara otomatis.
#include <iostream>
class Resource {
public:
Resource() { std::cout << "acquire\n"; }
~Resource() { std::cout << "release\n"; }
};
int main() {
Resource r; // acquired
} // released automaticallyMengapa RAII Sangat Andal
Pembersihan dijamin bahkan jika fungsi kembali lebih awal atau pengecualian dilemparkan. Anda tidak akan pernah lupa membebaskan sumber daya yang telah Anda bungkus.
Pembungkus RAII Sederhana
Berikut adalah pemilik int yang membebaskan memori dinamisnya dalam destruktor—tanpa delete manual di lokasi pemanggilan.
#include <iostream>
class IntBox {
int* p;
public:
IntBox(int v) : p(new int(v)) {}
~IntBox() { delete p; }
int get() const { return *p; }
};
int main() {
IntBox b(42);
std::cout << b.get() << "\n";
}Pembersihan Saat Pengembalian Lebih Awal
Karena destruktor dijalankan saat keluar dari lingkup, return lebih awal tetap memicu pembersihan.
#include <iostream>
class Guard {
public:
~Guard() { std::cout << "cleaned\n"; }
};
void work(bool stop) {
Guard g;
if (stop) return; // g still cleaned
std::cout << "more work\n";
}
int main() { work(true); }Pembersihan Saat Pengecualian
Jika pengecualian mengurai tumpukan, setiap objek RAII yang telah selesai dikonstruksi akan dihancurkan sepanjang proses tersebut. Sumber daya tidak pernah terlantar.
Tipe RAII Standar
Pustaka standar penuh dengan RAII: std::unique_ptr, std::lock_guard, std::fstream, dan std::vector semuanya melakukan pembersihan dalam destruktornya.
#include <vector>
#include <memory>
int main() {
std::vector<int> v{1, 2, 3}; // frees its buffer
auto p = std::make_unique<int>(9); // frees its int
}Tanpa Kode Pembersihan Manual
Dengan RAII, Anda tidak perlu lagi menulis delete, fclose, atau unlock secara manual. Pemanggilan destruktor yang disisipkan kompiler akan melakukannya untuk Anda.
Satu Pemilik untuk Setiap Sumber Daya
Setiap sumber daya sebaiknya memiliki satu pemilik RAII yang bertanggung jawab untuk membebaskannya. Berbagi kepemilikan dengan aman memerlukan tipe khusus seperti std::shared_ptr.
RAII Dapat Digabungkan
Objek RAII dapat berisi objek RAII lainnya. Penghancuran berlangsung berantai secara otomatis, sehingga sumber daya yang kompleks dibersihkan dengan benar.
#include <memory>
#include <vector>
struct Session {
std::vector<int> data; // RAII
std::unique_ptr<int> token; // RAII
}; // both members freed automaticallyRAII vs Pengelolaan Manual
Pengelolaan manual rentan terhadap kesalahan; RAII menjadikan pembersihan yang benar sebagai perilaku bawaan. Dalam setiap kasus, utamakan pembungkus RAII daripada pasangan pemerolehan dan pelepasan mentah.
Pemeriksaan Singkat
Uji pemahaman Anda tentang RAII.
Rangkuman
Anda telah mempelajari prinsip RAII: memperoleh sumber daya dalam konstruktor dan membebaskannya dalam destruktor. Prinsip ini menjamin pembersihan saat keluar secara normal, pengembalian lebih awal, dan pengecualian. Pustaka standar menggunakan RAII di mana-mana, dan kode Anda juga seharusnya demikian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Prinsip RAII” gratis?
Ya — teks lengkap “Prinsip RAII” 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 “Prinsip RAII”?
Kaitkan sumber daya dengan masa hidup objek 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 1 dari 4.
Berapa lama pelajaran “Prinsip RAII” 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.