0Pricing
C++ Academy · Lektion

Exception-Sicherheit

Exception-sicheren Code schreiben

Exception-Sicherheit ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was Ausnahmesicherheit bedeutet

Ausnahmesicherheit beschreibt, welche Zusicherungen Ihr Code einhält, wenn mitten in einer Operation eine Ausnahme ausgelöst wird.

Die No-Throw-Garantie

Die stärkste Stufe: Die Operation löst niemals eine Ausnahme aus. Destruktoren, Swaps und Move-Operationen sollten dies anstreben und mit noexcept markiert werden.

Die starke Garantie

Wenn die Operation eine Ausnahme auslöst, wird der Programmzustand zurückgesetzt, als hätte sie nie begonnen – eine Commit-oder-Rollback-Semantik.

Die grundlegende Garantie

Wenn die Operation eine Ausnahme auslöst, treten keine Ressourcenlecks auf und alle Invarianten bleiben erhalten, auch wenn sich der genaue Zustand geändert haben kann.

Keine Garantie

Die schwächste Stufe: Eine Ausnahme kann das Programm in einem fehlerhaften Zustand oder mit Ressourcenlecks zurücklassen. Vermeiden Sie solchen Code.

RAII bietet die grundlegende Garantie

Wenn Sie Ressourcen in RAII-Objekte kapseln, gibt das Stack-Unwinding sie automatisch frei – die grundlegende Garantie erhalten Sie dadurch nahezu kostenlos.

#include <memory>
#include <stdexcept>

void process() {
    auto buf = std::make_unique<int[]>(100);  // freed even if throw
    throw std::runtime_error("oops");          // no leak
}

Copy-and-Swap für starke Ausnahmesicherheit

Eine verbreitete Technik: Führen Sie alle riskanten Arbeiten an einer Kopie aus und tauschen Sie diese anschließend mit swap ein. Der Tausch löst keine Ausnahme aus, sodass die Änderung ganz oder gar nicht erfolgt.

void assign(Widget& target, const Widget& src) {
    Widget tmp = src;          // may throw, target untouched
    using std::swap;
    swap(target, tmp);         // no-throw commit
}

Operationen so anordnen, dass der Commit zuletzt erfolgt

Führen Sie jede Operation, die eine Ausnahme auslösen kann, vor jeder irreversiblen Änderung aus. Sobald Sie mit der Änderung eines gemeinsamen Zustands beginnen, darf kein Fehler mehr auftreten können.

Vorsicht bei Teilaktualisierungen

Wenn Sie zwei Member aktualisieren und beim zweiten eine Ausnahme auftreten kann, bleibt das Objekt inkonsistent. Bereiten Sie beide Änderungen vor und übernehmen Sie sie anschließend in nicht ausnahmeauslösenden Schritten.

Destruktoren dürfen keine Ausnahmen auslösen

Ein Destruktor, der während des Stack-Unwinding eine Ausnahme auslöst, ruft std::terminate auf. Halten Sie Destruktoren ausnahmesicher, um die Sicherheitszusicherungen zu erhalten.

Eine Garantie auswählen

Streben Sie nach Möglichkeit die starke Garantie an, bieten Sie immer mindestens die grundlegende Garantie und markieren Sie tatsächlich ausnahmesichere Operationen mit noexcept.

Kurze Überprüfung

Testen Sie Ihr Verständnis der Ausnahmesicherheit.

Zusammenfassung

Sie haben die vier Stufen der Ausnahmesicherheit kennengelernt: No-Throw, stark, grundlegend und keine. RAII bietet automatisch die grundlegende Garantie; Copy-and-Swap und ein zuletzt ausgeführter Commit bieten die starke Garantie. Halten Sie Destruktoren und Swaps ausnahmesicher.

Häufig gestellte Fragen

Ist die Lektion „Exception-Sicherheit“ kostenlos?

Ja — der vollständige Text von „Exception-Sicherheit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Exception-Sicherheit“?

Exception-sicheren Code schreiben Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Exception-Sicherheit“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. try, catch, throw
  2. Exception-Sicherheit
  3. noexcept-Spezifizierer
  4. Benutzerdefinierte Exception-Typen
← Zurück zu C++ Academy