Objektzerstörung in C
Objektzerstörung: Was, wann und wie
In C können Objekte grob als Objekte mit Gültigkeitsbereich und dynamisch klassifiziert werden Objekte. Bereichsbezogene Objekte haben eine Lebensdauer, die an ihren umschließenden Bereich gebunden ist (z. B. lokale Variablen, globale Variablen, Klasseninstanzen), während dynamische Objekte mithilfe von Zeigern (z. B. „Neu“, „Löschen“) erstellt und zerstört werden.
Bereichsgebunden Objekte
-
Automatische Objekte: In umgekehrter Reihenfolge der Erstellung zerstört wenn der Kontrollfluss ihren Gültigkeitsbereich verlässt (z. B. Funktionsausgang, Ende eines Blocks).
-
Nicht-lokale statische Objekte: Werden nach der Ausführung von main() in umgekehrter Reihenfolge der Erstellung zerstört.
-
Lokale statische Objekte: Werden erstellt, wenn der Kontrollfluss zum ersten Mal in ihre Definition eintritt, und nach main() in umgekehrter Reihenfolge zerstört. Ausführung.
-
Basisklasse und Member-Unterobjekte: Wird in umgekehrter Reihenfolge innerhalb des Destruktors eines Objekts zerstört, gefolgt von seinen Basisklassen-Unterobjekten.
-
Array-Elemente: In absteigender Reihenfolge zerstört.
-
Vorübergehend Objekte:Erstellt aus Wertausdrücken, zerstört, wenn der vollständige Ausdruck ausgewertet wird.
Dynamische Objekte
- Dynamische Objekte ( new Foo): Zerstört durch expliziten Aufruf von delete p.
- Dynamische Arrays (neues Foo[n]): Zerstört durch expliziten Aufruf von delete[] p.
Ausnahmebehandlung
- Ausnahmen werden über den Stapel zurückpropagiert und rufen Destruktoren auf zuvor erstellten automatischen Systemen auf Objekte.
- Destruktoren sollten niemals Ausnahmen auslösen.
- Wenn während der Objektkonstruktion eine Ausnahme auftritt, wird der zugrunde liegende Speicher freigegeben, bevor die Ausnahme ausgelöst wird.
Manuelle Objektzerstörung
Da C keinen Garbage Collector hat, müssen dynamische Objekte manuell freigegeben werden, um Ressourcen zu sparen Lecks.
Intelligente Zeiger
-
Referenzzählende Intelligente Zeiger (std::shared_ptr):Zerstören Sie automatisch das zugrunde liegende Objekt, wenn das Der letzte darauf verweisende std::shared_ptr wird zerstört.
Das obige ist der detaillierte Inhalt vonWie funktioniert die Objektzerstörung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!