Keamanan Pengecualian
Tulis kode yang aman terhadap pengecualian
Keamanan Pengecualian 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.
Makna Keamanan Pengecualian
Keamanan pengecualian menjelaskan jaminan yang tetap dipertahankan kode Anda ketika pengecualian dilemparkan di tengah operasi.
Jaminan Tanpa Pelemparan
Tingkat terkuat: operasi tidak pernah melempar pengecualian. Destruktor, pertukaran, dan operasi pemindahan sebaiknya menargetkan tingkat ini dan diberi tanda noexcept.
Jaminan Kuat
Jika operasi melempar pengecualian, keadaan program dikembalikan seolah-olah operasi tersebut tidak pernah dimulai—semantik terapkan atau batalkan.
Jaminan Dasar
Jika operasi melempar pengecualian, tidak ada sumber daya yang bocor dan semua invarian tetap terpenuhi, meskipun keadaan persisnya mungkin berubah.
Tanpa Jaminan
Yang paling lemah: pengecualian dapat meninggalkan program dalam keadaan rusak atau mengalami kebocoran. Hindari menulis kode seperti itu.
RAII Menyediakan Jaminan Dasar
Dengan membungkus sumber daya dalam objek RAII, penguraian tumpukan membebaskannya secara otomatis—sehingga Anda memperoleh jaminan dasar hampir tanpa usaha.
#include <memory>
#include <stdexcept>
void process() {
auto buf = std::make_unique<int[]>(100); // freed even if throw
throw std::runtime_error("oops"); // no leak
}Salin-dan-Tukar untuk Keamanan Kuat
Teknik yang umum: lakukan semua pekerjaan berisiko pada sebuah salinan, lalu masukkan salinan tersebut dengan swap. Pertukaran tidak melempar pengecualian, sehingga perubahan berlangsung seluruhnya atau tidak sama sekali.
void assign(Widget& target, const Widget& src) {
Widget tmp = src; // may throw, target untouched
using std::swap;
swap(target, tmp); // no-throw commit
}Urutkan Operasi agar Penerapan Menjadi yang Terakhir
Lakukan setiap operasi yang dapat melempar pengecualian sebelum perubahan apa pun yang tidak dapat dibatalkan. Setelah mulai mengubah keadaan bersama, Anda seharusnya tidak lagi dapat gagal.
Waspadai Pembaruan Sebagian
Memperbarui dua anggota ketika anggota kedua dapat melempar pengecualian akan membuat objek tidak konsisten. Siapkan keduanya, lalu terapkan keduanya dengan langkah-langkah yang tidak melempar pengecualian.
Destruktor Tidak Boleh Melempar Pengecualian
Destruktor yang melempar pengecualian selama penguraian akan memanggil std::terminate. Pastikan destruktor tidak melempar pengecualian untuk mempertahankan jaminan keamanan.
Memilih Jaminan
Usahakan jaminan kuat jika memungkinkan, selalu berikan setidaknya jaminan dasar, dan tandai operasi yang benar-benar tidak melempar pengecualian sebagai noexcept.
Pemeriksaan Cepat
Uji pemahaman Anda tentang keamanan pengecualian.
Ringkasan
Anda telah mempelajari empat tingkat keamanan pengecualian: tanpa pelemparan, kuat, dasar, dan tanpa jaminan. RAII memberikan jaminan dasar secara otomatis; salin-dan-tukar serta penerapan di tahap terakhir memberikan jaminan kuat. Pastikan destruktor dan pertukaran tidak melempar pengecualian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Keamanan Pengecualian” gratis?
Ya — teks lengkap “Keamanan Pengecualian” 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 “Keamanan Pengecualian”?
Tulis kode yang aman terhadap pengecualian 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 “Keamanan Pengecualian” 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
- try, catch, throw
- Keamanan Pengecualian
- Penentu noexcept
- Tipe Pengecualian Kustom