Junior
Kas ir izņēmumi C++?
sobes.tech AI
Atbilde no AI
Mehānisms, kas paredzēts novērot anomālas situācijas (kļūdas), kas rodas programmas izpildes laikā. Tas ļauj atdalīt koda daļu, kas atbild par programmas loģiku, no kļūdu apstrādes koda.
Galvenie vārdi:
try: Nosaka koda bloku, kurā var rasties izņēmumi.catch: Nosaka koda bloku, kas tiek izpildīts, ja rodas noteikts izņēmuma tips.throw: Ģenerē (izveido) izņēmumu. Izņēmuma tips var būt jebkurš objekts.
Darba princips:
- Kods, kas var izraisīt kļūdu, tiek ievietots
tryblokā. - Ja
tryblokā rodas izņēmums (izmantojotthrow), parastais programmas izpildes process tiek pārtraukts. - Sistēma meklē piemērotu
catchbloku, kas spēj apstrādāt radīto izņēmumu (atbilstoši tipam). - Ja tiek atrasts atbilstošs
catch, tā kods tiek izpildīts. - Ja nav atrasts piemērots
catchlīmenī, izņēmums "izplatās" uz augšu pa izsaukumu steku, līdz tiek atrasta piemērota apstrādes funkcija (vai programma nepareizi beidzas).
Piemērs:
#include <iostream>
#include <stdexcept> // Standarta izņēmumu tipi
int divide(int a, int b) {
if (b == 0) {
throw std::runtime_error("Division by zero!"); // Izveidojam izņēmumu
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Izsaucam funkciju, kas var izraisīt izņēmumu
std::cout << "Result: " << result << std::endl; // Šī rinda netiks izpildīta
} catch (const std::runtime_error& e) { // Notveram `std::runtime_error` tipu izņēmumu
std::cerr << "Error: " << e.what() << std::endl; // Apstrādājam izņēmumu
} catch (...) { // Notveram jebkuru citu izņēmumu
std::cerr << "An unknown error occurred." << std::endl;
}
std::cout << "Program continues after error handling." << std::endl;
return 0;
}
Priekšrocības:
- Loģikas un kļūdu apstrādes atdalīšana.
- Galvenā izpildes plūsmas vienkāršošana.
- Kļūdu apstrādes iespēja dažādos izsaukumu līmeņos.
Trūkumi:
- Var ietekmēt veiktspēju (steķa izplešanās dēļ).
- Plūsmas saprašana kļūst sarežģītāka, ja ir daudz izņēmumu.
- Nepareiza lietošana var novest pie resursu noplūdes (ja resursi netiek atbrīvoti, pirms tie tiek pareizi atbrīvoti pēc izņēmuma).
Lai nodrošinātu drošu darbu ar resursiem, ja ir izņēmumi, bieži izmanto RAII (Resource Acquisition Is Initialization) un gudrus rādītājus.