Bagikan melalui


Pengecualian: Menangkap dan Menghapus Pengecualian

Instruksi dan contoh berikut menunjukkan kepada Anda cara menangkap dan menghapus pengecualian. Untuk informasi selengkapnya tentang trykata 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

  1. try Gunakan kata kunci untuk menyiapkan try blokir. Jalankan pernyataan program apa pun yang mungkin melemparkan pengecualian dalam blok try .

    catch Gunakan kata kunci untuk menyiapkan catch blokir. Tempatkan kode penanganan pengecualian dalam catch blok. Kode dalam catch blok dijalankan hanya jika kode dalam try blok melemparkan pengecualian dari jenis yang ditentukan dalam catch pernyataan.

    Kerangka berikut menunjukkan cara try dan catch 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 berurutan catch 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.

Baca juga

Penanganan Pengecualian