Exception Handling: try, catch, throw ile Hata Yakalama

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Exception Handling: Hataları Yönetme Sanatı​


C++'ta hata yönetimi üç temel anahtar kelime üzerine kuruludur: throw (hatayı fırlat), try (hatayı bekle) ve catch (hatayı yakala).



1. Temel Mantık: Try - Catch Bloğu​


Hata çıkarma potansiyeli olan kodlarımızı try bloğu içine alırız. Eğer bir hata oluşursa, program akışı anında ilgili catch bloğuna atlar.

C++:
try {
// Hata cikarma ihtimali olan kodlar
int yas;
cin >> yas;
if (yas < 0) {
throw "Yas negatif olamaz!"; // Hatayi firlat
}
}
catch (const char* mesaj) {
// Hatayi burada yakala ve yonet
cerr << "Hata olustu: " << mesaj << endl;
}



2. Standart Hata Sınıfları (std::exception)​


C++'ta sadece metin veya sayı değil, nesneler de fırlatılabilir. Standart kütüphanedeki <stdexcept> başlığı, yaygın hatalar için hazır sınıflar sunar:

std::runtime_error: Çalışma zamanında oluşan genel hatalar.

std::out_of_range: Vektör veya dizi sınırlarının dışına çıkılması.

std::bad_alloc: Bellek ayırma (new) işleminin başarısız olması.

C++:
#include <stdexcept>

try {
std::vector<int> v = {1, 2};
cout << v.at(5); // out_of_range hatasi firlatir
}
catch (const std::out_of_range& e) {
cerr << "Indeks hatasi: " << e.what() << endl;
}



3. Çoklu Catch Blokları ve Ellipsis (...)​


Bir try bloğu birden fazla farklı tipte hata fırlatabilir. Her hata tipi için ayrı bir catch bloğu yazabilirsiniz. En sona eklenen catch(...) ise tipi bilinmeyen tüm hataları yakalar.

C++:
try {
// Karmaşik işlemler...
}
catch (int e) { /* ... / }
catch (const std::exception& e) { / ... */ }
catch (...) {
cout << "Bilinmeyen bir hata yakalandi!";
}



4. Neden Exception Handling Kullanmalıyız?​


ÖzellikHata Kontrolü (if-else)Exception Handling
Kod OkunabilirliğiHata kontrolü ve ana mantık birbirine karışır.Hata yönetimi ve ana mantık birbirinden ayrılır.
Hata YayılımıHata kodunun fonksiyonlar arasında taşınması gerekir.Hata, yakalanana kadar fonksiyon yığınında (call stack) otomatik yükselir.
Nesne TemizliğiManuel temizlik gerekebilir.Stack Unwinding ile yerel nesnelerin destructor'ları otomatik çağrılır.



Sonuç​


try-catch bloklarını kullanırken aşırıya kaçmamak önemlidir. Her satırı bu bloklara almak performansı olumsuz etkileyebilir. İstisnalar, adından da anlaşılacağı üzere sadece "istisnai" ve programın normal akışını bozan durumlar için kullanılmalıdır.
 
Geri
Üst