Fehlerbehandlung in C++

Diese Lektion behandelt die Techniken zur Erkennung und Behandlung von Fehlern in C++. Fokus liegt auf Ausnahmen (exceptions) und bewährten Vorgehensweisen.

1. Warum Fehlerbehandlung?

Programme können zur Laufzeit auf unerwartete Zustände stoßen. Fehlerbehandlung sorgt dafür, dass Programme kontrolliert reagieren, statt abzustürzen.

2. Fehler in C++

Fehler können kategorisiert werden als:

3. Exceptions – Grundidee

C++ verwendet Exceptions zur Behandlung von Laufzeitfehlern.
try {
    int a = 10, b = 0;
    if(b == 0) throw "Division durch Null!";
    int c = a / b;
} catch(const char* msg) {
    std::cerr << "Fehler: " << msg << std::endl;
}

4. Exception-Klassen

C++ bietet Standardklassen für Exceptions im Header <stdexcept>:
#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::out_of_range("Index außerhalb");
    } catch(const std::out_of_range& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
}

5. Benutzerdefinierte Exceptions

Eigene Fehlerklassen können von std::exception abgeleitet werden.
class MyError : public std::exception {
    const char* what() const noexcept override {
        return "Mein eigener Fehler!";
    }
};

try {
    throw MyError();
} catch(const MyError& e) {
    std::cerr << e.what() << std::endl;
}

6. Best Practices

7. RAII (Resource Acquisition Is Initialization)

Objekte verwalten Ressourcen so, dass beim Verlassen des Gültigkeitsbereichs automatisch aufgeräumt wird.
#include <fstream>
std::ifstream file("data.txt");
if(!file) throw std::runtime_error("Datei nicht gefunden");
// file wird beim Verlassen des Scope automatisch geschlossen

8. Zusammenfassung