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;
}