Sobes.tech
Middle

Wodurch werden Ausnahmen in C++ gespeichert?

sobes.tech KI

Antwort von AI

Mit Objekten. Beim Werfen einer Ausnahme mit throw wird ein temporäres Objekt erstellt, das dann an den Ausnahmebehandlungsmechanismus übergeben wird. Der Typ dieses Objekts bestimmt, welcher catch-Handler ausgewählt wird.

Hier ist ein Beispiel, das zeigt, wie Ausnahmen in Form von Objekten gespeichert werden:

#include <iostream>
#include <stdexcept>

class MyException {
    int error_code;
public:
    MyException(int code) : error_code(code) {}
    int get_code() const { return error_code; }
};

void test_func(int val) {
    if (val < 0) {
        // Wirft eine Ausnahme - Objekt der Klasse MyException
        throw MyException(-1);
    }
    if (val == 0) {
        // Wirft eine Standardausnahme - Objekt der Klasse std::runtime_error
        throw std::runtime_error("Wert darf nicht null sein.");
    }
    std::cout << "Wert ist positiv: " << val << std::endl;
}

int main() {
    try {
        test_func(-5);
    } catch (const MyException& e) {
        // Fängt die Ausnahme vom Typ MyException
        std::cerr << "MyException mit Code gefangen: " << e.get_code() << std::endl;
    } catch (const std::runtime_error& e) {
        // Fängt die Ausnahme vom Typ std::runtime_error
        std::cerr << "std::runtime_error gefangen: " << e.what() << std::endl;
    } catch (...) {
        // Fängt alle anderen Ausnahmen
        std::cerr << "Unbekannte Ausnahme gefangen." << std::endl;
    }

    try {
        test_func(0);
    } catch (const std::exception& e) {
        // Man kann die Basisklasse für Standardausnahmen fangen
        std::cerr << "Standardausnahme gefangen: " << e.what() << std::endl;
    }

    return 0;
}