Soy aficionado C++. Estoy escribiendo algunos códigos API de Win32 y hay identificadores y objetos asignados extrañamente de forma compuesta en abundancia. Entonces me preguntaba: ¿hay alguna clase de contenedor que facilite la administración de recursos? Por ejemplo, cuando quiero cargar algunos datos, abro un archivo con CreateFile()
y obtengo un HANDLE
. Cuando termine con esto, debo llamar al CloseHandle()
. Pero para cualquier función de carga razonablemente compleja habrá docenas de posibles puntos de salida, sin mencionar excepciones.¿Qué clase de contenedor en C++ debo usar para la administración automatizada de recursos?
Así que sería genial si pudiera envolver el controlador en algún tipo de clase de contenedor que llamaría automáticamente al CloseHandle()
una vez que la ejecución haya salido del alcance. Aún mejor: podría hacer un conteo de referencia para poder pasarlo dentro y fuera de otras funciones, y liberaría el recurso solo cuando la última referencia haya dejado el alcance.
El concepto es simple, pero ¿hay algo así en la biblioteca estándar? Estoy usando Visual Studio 2008, por cierto, y no quiero adjuntar un framework de terceros como Boost o algo así.
La mejor idea, en mi humilde opinión Estas clases se llaman protectores de manija ... – SadSido
El código es malo ya que la estructura se puede copiar. Consulte http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – Kerido
@Kerido, tal vez, tal vez no. Depende de la semántica del recurso que está envolviendo. Creo es justo darle a jalf el beneficio de la duda y asumir que el código publicado es solo un simple ejemplo ilustrativo. –