Wie zerstört lokale Variablen, wenn ein Block normalerweise in C genannt wird verlassen ++?

StackOverflow https://stackoverflow.com/questions/2605352

  •  25-09-2019
  •  | 
  •  

Frage

C ++ automagically Destruktoren aufruft alle lokalen Variablen in dem Block in umgekehrter Reihenfolge, unabhängig davon, ob der Block normal beendet wird (Kontrolle fällt durch) oder eine Ausnahme ausgelöst wird.

Sieht aus wie der Begriff Stack Abwickeln gilt nur für die letztere. Wie wird das erstgenannte Verfahren (der normale Ausgang des Blocks) genannt lokale Variablen bezüglich zerstören?

War es hilfreich?

Lösung

Ein Objekt wird zerstört automatisch, wenn es „Spielraum geht“. Dies könnte als „automatische Speicherrückgewinnung“ bezeichnet werden, aber das bezieht sich eigentlich auf der Garbage Collection (es gibt mehrere Papiere mit diesem Satz in ihrem Namen, der den Begriff mittlere Garbage Collection verwenden). Wenn es verwendet wird, die richtige Paarung Öffnen / Schließen, sperren / entsperren, oder andere Formen der Ressourcenerfassung mit ihren entsprechenden Release zu gewährleisten, dann wird sie als die Designmuster von

Andere Tipps

geschieht Stapel Abwickeln in diesen beiden Fällen ist es nur, dass unter normalen Ausführung der Stapel abgewickelt wird nur auf den Kontext des rufenden Methode (oder Block), wenn die Ausführung Methode zurückgibt (oder der Block verlassen wird). Lokale Variablen werden auf dem Stack zugeordnet sind, so dass sie in umgekehrter Reihenfolge der Zuteilung aufgeräumt, und es ist dieser Prozess, Abwickeln genannt wird. Es ist nicht anders als die Verarbeitung jede andere Art von Daten, die Sie in einer LIFO-Struktur speichern würden - z Undo, Redo.

Wenn eine Ausnahme ausgelöst wird der Handler den Stapel durch durch Null oder mehr Methoden entspannen, bis es einen findet, der die Ausnahme abfangen kann, oder bis es erreicht die Spitze des Stapels, bei dem dem nicht behandelte Exception-Handler Punkt wird aufgerufen, .

Es scheint Konvention zu sein, nur den Begriff Stack verwenden im Fall von Ausnahmebehandlung Abwickeln, aber es ist der gleiche Prozess in jedem dieser Fälle auftreten. Der spezielle Fall, wo die Stapel Abwicklungen aufgrund einer Methode spannendsten genannt zurückkehren, es scheint nicht zu jeder Konvention zu sein für die Benennung, was passiert, wenn ein scoped Codeblock verlassen wird.

Die lokale Variable zerstört wird, wenn es Spielraum erlischt. Vielleicht ist der Prozess wie "going out of scope" genannt wird?

Ich bin nicht sicher, dass es einen Namen dafür. Stack-Variablen sind so automatisch, dass niemand Sorgen um sie, nie, nicht einmal genug, um einen Namen für den automatischen Bereinigungsprozess zu geben.

Nennen Sie es "going out of scope", schätze ich.

Ich habe es immer gehört, gesprochen als „Spielraum Ausgehen“ oder genauer „ein auto Variable Umfang going out“.

Wenn das, was Sie fragen wird, wie der Aufruf der Methode tatsächlich in Maschinencode umgesetzt wird, würde ich sagen, dass es auf der Aufrufkonvention verwendet abhängen würde

scroll top