Özel Durumlar: Özel Durumları Yakalama ve Silme
Aşağıdaki yönergelerde ve örneklerde özel durumları yakalama ve silme işlemleri gösterilmektedir. , catch
ve anahtar sözcükleri hakkında try
daha 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
Bir blok ayarlamak
try
için anahtar sözcüğünütry
kullanın. Bir blok içindetry
ö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 bircatch
bloğa yerleştirin. Bloktakicatch
kod yalnızca bloğun içindekitry
kod deyimindecatch
belirtilen türde bir özel durum oluşturursa yürütülür.Aşağıdaki iskelet, ve
catch
bloklarının normalde nasıltry
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.