Junior
C++-də istisnalar nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Proqramın icrası zamanı baş verən qeyri-adi vəziyyətlərin (səhvlərin) işlənməsi mexanizmi. Bu, proqramın məntiqinə cavabdeh kodu səhv işləmə kodundan ayırmağa imkan verir.
Açar sözlər:
try: Xəta baş verə biləcək kod blokunu müəyyən edir.catch: Müəyyən bir növ istisna baş verdikdə icra olunan kod blokunu müəyyən edir.throw: İstisna yaradır (yaradır). İstisna növü hər hansı obyekt ola bilər.
İş prinsipi:
- Xəta törədə biləcək kod
tryblokuna yerləşdirilir. - Əgər
tryblokunda istisna baş verərsə (throwilə yaradılır), proqramın normal icrası dayandırılır. - Sistem yaradılan istisnaya uyğun
catchblokunu axtarır (növə görə). - Əgər uyğun
catchtapılsa, onun kodu icra olunur. - Əgər cari çağırış səviyyəsində uyğun
catchtapılmazsa, istisna yuxarıya, çağırış yığını boyunca "yayılır" və uyğun idarəetmə funksiyası tapılana qədər davam edir (və ya proqram düzgün olmayan şəkildə sona çatır).
Nümunə:
#include <iostream>
#include <stdexcept> // Standart istisna tipləri üçün
int divide(int a, int b) {
if (b == 0) {
throw std::runtime_error("Sıfıra bölmə!"); // İstisna yaradılır
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // İstisna ata biləcək funksiyanı çağırırıq
std::cout << "Nəticə: " << result << std::endl; // Bu sətir icra olunmayacaq
} catch (const std::runtime_error& e) { // std::runtime_error tipində istisnayı tuturuq
std::cerr << "Xəta: " << e.what() << std::endl; // Xətanı işləyirik
} catch (...) { // Hər hansı digər istisnaları tuturuq
std::cerr << "Naməlum bir xəta baş verdi." << std::endl;
}
std::cout << "Proqram xəta işlənməsindən sonra davam edir." << std::endl;
return 0;
}
Üstünlüklər:
- Logika və xəta işləmə kodlarının ayrılması.
- Əsas axını sadələşdirir.
- Xətaları müxtəlif çağırış səviyyələrində işləmək imkanı.
Çatışmazlıqlar:
- Yığın yayılması səbəbindən performansa təsir edə bilər.
- Çox sayda istisna ilə icra axını başa düşmək çətinləşə bilər.
- Yanlış istifadə resurs sızıntılarına səbəb ola bilər (əgər resurslar düzgün sərbəst buraxılmayıbsa və ya istisna baş verəndə əvvəlcədən sərbəst buraxılmayıbsa).
İstisnalarla təhlükəsiz işləmək üçün tez-tez RAII (Resource Acquisition Is Initialization) və ağıllı göstəricilər istifadə olunur.