Sobes.tech
Junior

C++ da istisnolar nima?

sobes.tech AI

AIdan javob

Dastur bajarilayotganda yuzaga keladigan noaniq holatlar (xatoliklar)ni boshqarish mexanizmi. Bu kodni dastur mantiği bilan xatoliklarni boshqarish kodidan ajratishga imkon beradi.

Kalit so'zlar:

  • try: Xatoliklar yuz berishi mumkin bo'lgan kod blokini belgilaydi.
  • catch: Belgilangan turdagi xatolik yuz berganda bajariladigan kod blokini belgilaydi.
  • throw: Xatolikni (istisno) yaratadi. Xatolik turi har qanday obyekt bo'lishi mumkin.

Ishlash prinsipi:

  1. Xatolik keltirib chiqarishi mumkin bo'lgan kod try blokiga joylashtiriladi.
  2. Agar try blokida xatolik yuz bersa ( throw yordamida yaratilgan), odatiy dastur bajarilishi to'xtatiladi.
  3. Tizim yaratilgan xatolikni boshqarishga qodir bo'lgan mos catch blokini qidiradi (turi bo'yicha).
  4. Agar mos catch topilsa, uning kodi bajariladi.
  5. Agar joriy chaqiruv darajasida mos catch topilmasa, xatolik yuqoriga, chaqiruvlar steki bo'ylab "tarqaladi" va mos boshqaruv funksiyasi topilguncha davom etadi (yoki dastur noto'g'ri yakunlanadi).

Misol:

#include <iostream>
#include <stdexcept> // Standart xatolik turlari uchun

int divide(int a, int b) {
    if (b == 0) {
        throw std::runtime_error("Nolga bo'lish!"); // Xatolikni yaratish
    }
    return a / b;
}

int main() {
    try {
        int result = divide(10, 0); // Xatolik chiqarishi mumkin bo'lgan funksiyani chaqirish
        std::cout << "Natija: " << result << std::endl; // Bu satr bajarilmaydi
    } catch (const std::runtime_error& e) { // std::runtime_error turidagi xatolikni ushlash
        std::cerr << "Xato: " << e.what() << std::endl; // Xatoni boshqarish
    } catch (...) { // Boshqa barcha xatoliklarni ushlash
        std::cerr << "Noma'lum xatolik yuz berdi." << std::endl;
    }

    std::cout << "Xato bilan ishlashdan keyin dastur davom etadi." << std::endl;
    return 0;
}

Afzalliklar:

  • Mantiq va xatoliklarni boshqarish kodlarini ajratish.
  • Asosiy kod oqimini soddalashtirish.
  • Xatoliklarni turli darajalarda boshqarish imkoniyati.

Kamchiliklar:

  • Yig'ish yordami bilan ishlash (yig'ishni tarqatish) tufayli ishlash tezligini pasaytirishi mumkin.
  • Bir nechta xatolik bilan bajarilish oqimini tushunishni qiyinlashtirishi mumkin.
  • Noto'g'ri foydalanish resurslar oqib ketishiga olib kelishi mumkin (agar resurslar to'g'ri bo'shatilmasdan oldin xatolik yuzaga kelsa).

Xatoliklar bilan xavfsiz ishlash uchun RAII (Resource Acquisition Is Initialization) va aqlli ko'rsatkichlar keng qo'llaniladi.