Sobes.tech
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:

  1. Xəta törədə biləcək kod try blokuna yerləşdirilir.
  2. Əgər try blokunda istisna baş verərsə ( throw ilə yaradılır), proqramın normal icrası dayandırılır.
  3. Sistem yaradılan istisnaya uyğun catch blokunu axtarır (növə görə).
  4. Əgər uyğun catch tapılsa, onun kodu icra olunur.
  5. Əgər cari çağırış səviyyəsində uyğun catch tapı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.