2012-04-10 7 views
5

Der Sinn, den ich über dieses Idiom habe, ist, dass es nützlich ist, weil es sicherstellt, dass Ressourcen freigegeben werden, nachdem das Objekt, das sie verwendet, den Geltungsbereich verlässt.Warum wird RAII so genannt?

Mit anderen Worten, es ist mehr über de-Akquisition und de-Initialisierung, also warum dieses Idiom, wie es ist benannt ist?

Antwort

6

Zunächst sollte ich bemerken, dass es weithin als eine schlecht benannte Idiom gilt. Viele Leute bevorzugen SBRM, was für Stack Bound Resource Management steht. Obwohl ich (widerwillig) "RAII" benutze, einfach weil es allgemein bekannt ist und verwendet wird, denke ich, dass SBRM die wirkliche Absicht viel besser beschreibt.

Zweitens, als RAII neu war, galt es sowohl für die Beschaffung als auch für die Freigabe von Ressourcen. Insbesondere war es damals üblich, dass die Initialisierung in zwei Schritten stattfand. Sie würden zuerst ein Objekt definieren und erst danach alle mit diesem Objekt verbundenen Ressourcen dynamisch zuweisen. Viele Styleguides befürworteten dies, vor allem, weil zu dieser Zeit (bevor C++ eine Ausnahmebehandlung hatte) es keinen guten Weg gab, mit einem Fehler in einem Konstruktor umzugehen. Daher wird in den Style Guides oft gesagt, Konstruktoren sollten nur das Minimum an Arbeit leisten und speziell alles vermeiden, was für Fehler offen war - insbesondere das Zuweisen von Ressourcen (und einige sagen immer noch so etwas).

Ziemlich einige von denen bereits behandelt Freigabe die Ressourcen in der Destruktor obwohl, so wäre eine klare Unterscheidung von der bisherigen Praxis nicht so klar gewesen.