Heim > Backend-Entwicklung > C++ > Überspringt „goto' Destruktoraufrufe in C?

Überspringt „goto' Destruktoraufrufe in C?

Barbara Streisand
Freigeben: 2024-11-26 12:24:08
Original
368 Leute haben es durchsucht

Does `goto` Skip Destructor Calls in C  ?

Können Goto-Sprünge über den Code hinweg erfolgen, ohne Destruktoren aufzurufen?

Frage: Stimmt es, dass Goto-Sprünge Code umgehen können? Abschnitte ohne Ausführung Destruktoren?

Beispiel:Betrachten Sie den folgenden Code:

void f() {
   int x = 0;
   goto lol;
}

int main() {
   f();
lol:
   return 0;
}
Nach dem Login kopieren

Wird das Objekt x nach dem Goto-Sprung gelöscht?

Antwort:

Nein, das Objekt x wird es nicht sein durchgesickert.

Dieser Glaube ist ein weit verbreitetes Missverständnis. Goto-Sprünge umgehen nicht die Scoping-Mechanismen von C und Destruktoren werden wie erwartet aufgerufen.

1. Beschriftungsbereich:

Goto-Anweisungen können nicht über Funktionsgrenzen springen. Der Geltungsbereich eines Labels ist auf die Funktion beschränkt, in der es definiert ist.

2. Objektinitialisierung:

Goto-Sprünge können die Objektinitialisierung nicht umgehen. Der Versuch, an einem nicht initialisierten Objekt vorbeizuspringen, führt zu einem Compilerfehler. Ebenso führt das Zurückspringen über ein initialisiertes Objekt zur Zerstörung seiner vorherigen Instanz.

3. Objektbereich:

Objekte mit automatischer Speicherdauer gehen nicht verloren, wenn ein Goto-Sprung ihren Gültigkeitsbereich verlässt. C stellt sicher, dass Objekte beim Verlassen eines Bereichs in der umgekehrten Reihenfolge ihrer Konstruktion zerstört werden.

Schlussfolgerung:

Goto-Sprünge respektieren vollständig die Bereichs- und Zerstörungsregeln von C. Es ist nicht möglich, goto zu verwenden, um diese Mechanismen zu umgehen und Speicherlecks zu verursachen. Es wird jedoch immer noch nicht empfohlen, goto übermäßig zu verwenden, da dies zu Code führen kann, der schwer zu verstehen und zu warten ist.

Das obige ist der detaillierte Inhalt vonÜberspringt „goto' Destruktoraufrufe in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage