Pengecualian: Menangkap dan Menghapus Pengecualian
Instruksi dan contoh berikut menunjukkan kepada Anda cara menangkap dan menghapus pengecualian. Untuk informasi selengkapnya tentang try
kata kunci , catch
, dan throw
, lihat Praktik terbaik C++ Modern untuk pengecualian dan penanganan kesalahan.
Penangan pengecualian Anda harus menghapus objek pengecualian yang mereka tangani, karena kegagalan untuk menghapus pengecualian menyebabkan kebocoran memori setiap kali kode tersebut menangkap pengecualian.
Blok Anda catch
harus menghapus pengecualian saat:
Blok melempar
catch
pengecualian baru.Tentu saja, Anda tidak boleh menghapus pengecualian jika Anda melemparkan pengecualian yang sama lagi:
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
Eksekusi kembali dari dalam
catch
blok.
Catatan
Saat menghapus CException
, gunakan Delete
fungsi anggota untuk menghapus pengecualian. Jangan gunakan delete
kata kunci, karena dapat gagal jika pengecualian tidak ada di tumpukan.
Untuk menangkap dan menghapus pengecualian
try
Gunakan kata kunci untuk menyiapkantry
blokir. Jalankan pernyataan program apa pun yang mungkin melemparkan pengecualian dalam bloktry
.catch
Gunakan kata kunci untuk menyiapkancatch
blokir. Tempatkan kode penanganan pengecualian dalamcatch
blok. Kode dalamcatch
blok dijalankan hanya jika kode dalamtry
blok melemparkan pengecualian dari jenis yang ditentukan dalamcatch
pernyataan.Kerangka berikut menunjukkan cara
try
dancatch
blok biasanya diatur:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CException* e) { // Handle the exception here. // "e" contains information about the exception. e->Delete(); }
Ketika pengecualian dilemparkan, kontrol lolos ke blok pertama
catch
yang deklarasi pengecualiannya cocok dengan jenis pengecualian. Anda dapat secara selektif menangani berbagai jenis pengecualian dengan blok berurutancatch
seperti yang tercantum di bawah ini:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CMemoryException* e) { // Handle the out-of-memory exception here. e->Delete(); } catch (CFileException* e) { // Handle the file exceptions here. e->Delete(); } catch (CException* e) { // Handle all other types of exceptions here. e->Delete(); }
Untuk informasi selengkapnya, lihat Pengecualian: Mengonversi dari Makro Pengecualian MFC.