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:
- Xatolik keltirib chiqarishi mumkin bo'lgan kod
tryblokiga joylashtiriladi. - Agar
tryblokida xatolik yuz bersa (throwyordamida yaratilgan), odatiy dastur bajarilishi to'xtatiladi. - Tizim yaratilgan xatolikni boshqarishga qodir bo'lgan mos
catchblokini qidiradi (turi bo'yicha). - Agar mos
catchtopilsa, uning kodi bajariladi. - Agar joriy chaqiruv darajasida mos
catchtopilmasa, 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.