Video: Exception Handling (Hata Yakalama) Nesne Yönelimli Programlama 18. Video 2024
Kaynakları yerel olarak ayıran bir C ++ işlevi, bir istisna yakalamak, bazı işlemler yapmak ve daha sonra yığın zincirini yeniden atmak gerekebilir. Aşağıdaki örneği düşünün:
void fileFunc () {ofstream * pOut = yeni ofstream ("File. Txt"); otherFunction (); delete pOut;}
Birçok programcının bildiği gibi, new tarafından ayrılan bellek otomatik olarak yığına geri dönmez. OtherFunction () bir istisna atarsa, kontrol delete, komutunu çağırmadan programdan çıkacaktır ve fileFunc () başında ayrılan bellek kaybolacaktır.
void fileFunc () {ofstream * pOut = yeni ofstream ("Dosya txt"); try {otherFunction (); pOut'u sil;} catch (…) {pOut'u sil; throw;}}Bu ifade içinde, fileFunc (), daha önce yığın için ayrılan belleği döndürür. Bununla birlikte, istisnanın kalan kısmını işleyecek bir konumda değil, çünkü neyin yanlış geçtiğine dair hiçbir fikri yok. Ne tür bir nesne yakaladığını bile bilmiyor.