Destruktoren und Aufräumen
Ressourcen automatisch freigeben
Destruktoren und Aufräumen 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 ein Destruktor tut
Ein Destruktor wird ausgeführt, wenn die Lebensdauer eines Objekts endet. Seine Aufgabe ist es, alles freizugeben, was das Objekt besitzt. Er wird als ~ClassName bezeichnet.
#include <iostream>
class File {
public:
~File() { std::cout << "closing file\n"; }
};
int main() {
File f;
} // ~File runs hereBesessenen Speicher freigeben
Wenn eine Klasse Heap-Speicher besitzt, muss ihr Destruktor ihn freigeben. Dies ist der klassische Ort für den Aufruf von delete.
#include <iostream>
class Buffer {
int* data;
public:
Buffer(int n) : data(new int[n]) {}
~Buffer() { delete[] data; } // cleanup
};
int main() { Buffer b(10); }Destruktoren werden automatisch ausgeführt
Bei Stack-Objekten rufen Sie Destruktoren nicht selbst auf – der Compiler fügt den Aufruf am Ende des Gültigkeitsbereichs ein.
Umgekehrte Reihenfolge der Member
Member-Objekte werden nach der Ausführung des Destruktor-Rumpfs in der umgekehrten Reihenfolge ihrer Deklaration zerstört.
#include <iostream>
struct A { ~A() { std::cout << "~A\n"; } };
struct B { ~B() { std::cout << "~B\n"; } };
struct C {
A a;
B b; // destroyed before a
~C() { std::cout << "~C\n"; }
};
int main() { C c; }Virtuelle Destruktoren
Wenn Sie ein abgeleitetes Objekt über einen Zeiger auf die Basisklasse löschen, muss der Destruktor der Basisklasse virtual sein – andernfalls bleibt der abgeleitete Teil bestehen.
#include <iostream>
struct Base {
virtual ~Base() { std::cout << "~Base\n"; }
};
struct Derived : Base {
~Derived() override { std::cout << "~Derived\n"; }
};
int main() {
Base* p = new Derived();
delete p; // both run thanks to virtual
}Destruktoren sollten keine Ausnahmen auslösen
Eine Ausnahme aus einem Destruktor während der Stack-Abwicklung beendet das Programm. Destruktoren sollten (implizit) mit noexcept versehen sein und niemals Ausnahmen entweichen lassen.
Der Standarddestruktor
Wenn Sie keinen Destruktor schreiben, erzeugt der Compiler einen, der jedes Member zerstört. Für Klassen, die ausschließlich RAII-Member enthalten, ist das genau richtig.
#include <string>
#include <vector>
struct Record {
std::string name; // self-cleaning
std::vector<int> values; // self-cleaning
}; // default destructor is enough= default-Destruktor
Schreiben Sie ~Class() = default;, um den vom Compiler erzeugten Destruktor ausdrücklich anzufordern – nützlich, wenn Sie einen virtuellen Destruktor benötigen, aber keine eigene Logik.
#include <iostream>
struct Shape {
virtual ~Shape() = default; // virtual + default
};Nicht-Speicherressourcen freigeben
Destruktoren schließen auch Dateien, geben Sperren frei und trennen Sockets – sie geben nicht nur Speicher frei. Jede erworbene Ressource gehört hierher.
Reihenfolge zwischen Objekten
Mehrere lokale Variablen werden in umgekehrter Konstruktionsreihenfolge zerstört, sodass ein Destruktor sicher auf Objekte zugreifen kann, die vor seinem Objekt erstellt wurden.
RAII-Member die Arbeit erledigen lassen
Wenn jedes Member ein RAII-Typ ist, benötigen Sie häufig überhaupt keinen eigenen Destruktor. Schreiben Sie Destruktoren von Hand nur für rohe Ressourcen.
Kurze Überprüfung
Testen Sie Ihr Verständnis von Destruktoren.
Zusammenfassung
Sie haben gelernt, dass Destruktoren besessene Ressourcen am Ende der Lebensdauer automatisch freigeben, Member in umgekehrter Deklarationsreihenfolge ausführen, keine Ausnahmen auslösen dürfen und in polymorphen Basisklassen virtual sein müssen. RAII-Member machen eigene Destruktoren häufig überflüssig.
Lerne C++ mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 51
- Lektionen
- 203
Häufig gestellte Fragen
Ist die Lektion „Destruktoren und Aufräumen“ kostenlos?
Ja — der vollständige Text von „Destruktoren und Aufräumen“ 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 „Destruktoren und Aufräumen“?
Ressourcen automatisch freigeben 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 „Destruktoren und Aufräumen“?
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
- Das RAII-Prinzip
- Destruktoren und Aufräumen
- Rule of Three/Five
- Scope Guards