Diferencia entre revisiones de «Programación en Ada/Tipos/Punteros a objetos»

Contenido eliminado Contenido añadido
mSin resumen de edición
Línea 62:
 
Cuando se quiera liberar la memoria dinámicamente, hay que hacer uso del
procedimiento genérico [[Programación en Ada / Unidades predefinidas / Ada.Unchecked_Deallocation|Ada.Unchecked_Deallocation]] [http://www.adaic.org/standards/95lrm/html/RM-13-11-2.html#I4441], por ejemplo:
 
with Ada.Unchecked_Deallocation;
Línea 79:
end Ejemplo_Liberar_Memoria;
 
El nombre de Unchecked_Deallocation viene del hecho de que no hay comprobación de que no queden punteros colgantes (''dangling pointers''), es decir que si se ha copiado el puntero en otra variable, después de llamar a Liberar_Vector el puntero copia está apuntando a una dirección de memoria no reservada y los efectos son imprevisibles, puesto que se puede haber reservado y se pude escribir o leer memoria que ya no pertenece a ese objeto.
 
Este sistema es similar al de C++ con new y delete. Un sistema de recolección de basura similar al de Java está previsto en el estándar, pero ningún compilador de Ada hasta el momento lo proporciona. Esto es debido a que aunque es un mecanismo más seguro, es menos eficiente y puede ser un problema para los sistemas de tiempo real por su impredictibilidad.
 
En Ada 95 existen métodos de gestión de memoria más seguros que el uso directo de Unchecked_Deallocation basados en los {{Ada:|T|t|ipos controlados}}, algo semejante a lo que se consigue en C++ con constructores y destructores que manejan memoria dinámica.
 
 
== Manual de referencia de Ada ==