Junior
Čo sú výnimky v C++?
sobes.tech AI
Odpoveď od AI
Mechanizmus spracovania anomálnych situácií (chýb), ktoré vznikajú počas vykonávania programu. Umožňuje oddeliť kód zodpovedný za logiku programu od kódu spracovania chýb.
Kľúčové slová:
try: Určuje blok kódu, v ktorom môžu nastať výnimky.catch: Určuje blok kódu, ktorý sa vykoná pri výskyte určitého typu výnimky.throw: Generuje (vytvára) výnimku. Typ výnimky môže byť akýkoľvek objekt.
Princíp práce:
- Kód, ktorý môže spôsobiť chybu, sa umiestni do bloku
try. - Ak v bloku
tryvznikne výnimka (pomocouthrow), bežné vykonávanie programu sa preruší. - Systém hľadá vhodný blok
catch, schopný spracovať generovanú výnimku (podľa typu). - Ak je nájdený zodpovedajúci
catch, jeho kód sa vykoná. - Ak sa na aktuálnej úrovni volaní nenájde vhodný
catch, výnimka "sa rozšíri" nahor po zásobníku volaní, kým sa nenájde vhodná funkcia na spracovanie (alebo program sa ukončí nesprávne).
Príklad:
#include <iostream>
#include <stdexcept> // Pre štandardné typy výnimiek
int divide(int a, int b) {
if (b == 0) {
throw std::runtime_error("Division by zero!"); // Generujeme výnimku
}
return a / b;
}
int main() {
try {
int result = divide(10, 0); // Voláme funkciu, ktorá môže vyhodiť výnimku
std::cout << "Result: " << result << std::endl; // Táto línia sa nevykoná
} catch (const std::runtime_error& e) { // Chytáme výnimku typu std::runtime_error
std::cerr << "Error: " << e.what() << std::endl; // Spracovávame výnimku
} catch (...) { // Chytáme akúkoľvek inú výnimku
std::cerr << "An unknown error occurred." << std::endl;
}
std::cout << "Program pokračuje po spracovaní chyby." << std::endl;
return 0;
}
Výhody:
- Oddelenie logiky od spracovania chýb.
- Zjednodušenie hlavného toku vykonávania.
- Možnosť spracovania chýb na rôznych úrovniach hierarchie volaní.
Nevýhody:
- Môžu ovplyvniť výkon (kvôli rozbaleniu zásobníka).
- Zložitejšie pochopenie toku vykonávania pri viacerých výnimkách.
- Nesprávne použitie môže viesť k únikom zdrojov (ak zdroje nie sú uvoľnené pri vzniku výnimky pred ich správnym uvoľnením).
Pre bezpečnú prácu so zdrojmi pri výskyte výnimiek sa často používajú RAII (Resource Acquisition Is Initialization) a inteligentné ukazovatele.