2012-04-10 26 views
5

La sensación que tengo sobre este modismo es que es útil porque asegura que los recursos se liberen después de que el objeto que los utiliza salga del alcance.¿Por qué se llama RAII?

En otras palabras, se trata más de de adquisición y de-inicialización, ¿por qué es este lenguaje nombrado como es?

Respuesta

6

En primer lugar, debería tener en cuenta que se considera ampliamente una expresión idiomática mal nombrada. Mucha gente prefiere SBRM, que significa Stack Bound Resource Management. Aunque yo (de mala gana) sigo el uso de "RAII" simplemente porque es ampliamente conocido y utilizado, creo que SBRM ofrece una descripción mucho mejor de la intención real.

En segundo lugar, cuando RAII era nuevo, se aplicaba tanto a la adquisición como a la liberación de recursos. En particular, en ese momento era bastante común ver la inicialización en dos pasos. Primero definiría un objeto y solo después asignaría dinámicamente los recursos asociados con ese objeto. Muchas guías de estilo defendieron esto, en gran parte porque en ese momento (antes de que C++ tuviera manejo de excepciones) no había una buena forma de lidiar con la falla en un constructor. Por lo tanto, las guías de estilo a menudo decían que los constructores deberían hacer solo el mínimo de trabajo, y evitar específicamente todo lo que estuviera abierto a fallas, especialmente asignando recursos (y algunos aún dicen cosas así).

Muchos de los que ya se han manejado liberando los recursos en el destructor, por lo que no habría sido una distinción tan clara de la práctica anterior.