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:
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?
| Özellik | Hata Kontrolü (if-else) | Exception Handling |
|---|---|---|
| Kod Okunabilirliği | Hata 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ği | Manuel 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.