Aracılığıyla paylaş


Özel Durumlar: Özel Durumları Yakalama ve Silme

Aşağıdaki yönergelerde ve örneklerde özel durumları yakalama ve silme işlemleri gösterilmektedir. , catchve anahtar sözcükleri hakkında trydaha fazla bilgi için bkz. Özel durumlar ve throw hata işleme için modern C++ en iyi yöntemleri.

Özel durum işleyicilerinizin işledikleri özel durum nesnelerini silmeleri gerekir, çünkü özel durumun silinememesi, kod bir özel durum yakaladığında bellek sızıntısına neden olur.

Bloğunuz catch şu durumlarda bir özel durumu silmelidir:

  • Blok catch yeni bir özel durum oluşturur.

    Elbette, aynı özel durumu yeniden oluşturursanız özel durumu silmemelisiniz:

    catch (CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else
          e->Delete();
    }
    
  • Yürütme, bloğun catch içinden döndürür.

Dekont

bir CExceptionöğesini silerken, özel durumu silmek için üye işlevini kullanın Delete . Özel durum yığında değilse başarısız olabileceğinden anahtar sözcüğünü kullanmayın delete .

Özel durumları yakalamak ve silmek için

  1. Bir blok ayarlamak try için anahtar sözcüğünü try kullanın. Bir blok içinde try özel durum oluşturabilecek program deyimlerini yürütür.

    Bir blok ayarlamak catch için anahtar sözcüğünü catch kullanın. Özel durum işleme kodunu bir catch bloğa yerleştirin. Bloktaki catch kod yalnızca bloğun içindeki try kod deyiminde catch belirtilen türde bir özel durum oluşturursa yürütülür.

    Aşağıdaki iskelet, ve catch bloklarının normalde nasıl try düzenlendiğini gösterir:

    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();
    }
    

    Bir özel durum oluşturulduğunda denetim, özel durum bildirimi özel durum türüyle eşleşen ilk catch bloğa geçer. Aşağıda listelenen sıralı catch bloklarla farklı özel durum türlerini seçmeli olarak işleyebilirsiniz:

    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();
    }
    

Daha fazla bilgi için bkz . Özel Durumlar: MFC Özel Durum Makrolarından Dönüştürme.

Ayrıca bkz.

Özel Durum İşleme