Citation Hunt

Das unten stehende Wikipedia-Snippet wird von keiner verlässlichen Quelle unterstützt. Kannst du eine finden?

Klicke auf Verstanden!, um zu Wikipedia zu gehen und das Snippet zu reparieren, oder Nächstes!, um ein anderes zu sehen. Viel Glück!

In Seite Ressourcenbelegung ist Initialisierung:

"

Das korrekte Funktionieren dieser Technik hängt wesentlich von den Eigenschaften der Konstruktoren und Destruktoren der Sprache ab. In C++ wird durch den Sprachstandard garantiert, dass ein Objekt beim Durchlaufen seiner Deklaration erstellt und dabei sein Konstruktor aufgerufen wird. Beim Verlassen seines Gültigkeitsbereichs muss das Objekt zerstört werden, d. h. sein Destruktor wird aufgerufen und kann die Freigabe von Ressourcen veranlassen.[1] Dass ein Destruktor aufgerufen wird, kann allerdings in keiner Programmiersprache garantiert werden, da Programme immer abnormal (z. B. durch Stromausfall oder SIGKILL) beendet werden können. In solchen Fällen kann allerdings keine Programmiertechnik die korrekte Freigabe der Ressourcen sicherstellen.

Programmiersprachen mit Garbage Collection, wie z. B. C# oder Java, machen keine Garantien bezüglich des Zeitpunkts, zu dem ein nicht mehr referenziertes Objekt durch den Garbage Collector freigegeben wird. Dieser Zeitpunkt, zu dem ein Objekt zerstört und die Finalisierungsmethode aufgerufen wird, ist bei nebenläufiger Garbage Collection auch nicht mehr deterministisch. Dadurch kann das Objekt eine Ressource länger belegen als eigentlich erwartet, insbesondere auch über seinen Gültigkeitsbereich hinaus. Allgemein kann dieses Problem nur umgangen werden, indem explizit eine Funktion zur Freigabe der Ressourcen aufgerufen wird und/oder spezielle Sprachkonstrukte verwendet werden.[2][3][4]

Die für C# empfohlene Alternative ist die Implementierung des System.IDisposable-Interfaces – auch Dispose Pattern genannt. Bei Verwendung des using-Blocks wird sichergestellt, dass die Methode Dispose() am Ende dieses Blocks aufgerufen wird, um belegte Ressourcen zu einem definierten Zeitpunkt freizugeben.

In Java kann mithilfe der try-with-resources-Anweisung ähnlich sichergestellt werden, dass Ressourcen am Ende eines Gültigkeitsbereichs in umgekehrter Reihenfolge wieder freigegeben werden.[5][6]