Diferencia entre revisiones de «Programación en Vala/Funcionalidades avanzadas del lenguaje»

Contenido eliminado Contenido añadido
Sigmar (discusión | contribs.)
Sigmar (discusión | contribs.)
Línea 650:
La gestión de memoria en Vala se basa en el [http://es.wikipedia.org/wiki/Conteo_de_referencias conteo automático de referencias]. Cada vez que un objeto se asigna a una variable su contador de referencias se incrementa en 1, cada vez que una variable, la cual referencia un objeto, sale del ámbito; su contador interno de referencias se decrementa en 1. Si el contador de referencias alcanza el valor 0 el objeto será liberado (el bloque de memoria que contiene ese objeto será liberado).
 
Sin embargo, es posible formar un ciclo de referencias con las estructuras de datos que el programador defina. Por ejemplo, con una [http://es.wikipedia.org/wiki/%C3%81rbol_%28inform%C3%A1tica%29 estructura de árbol] de datos dónde un nodo hijo mantiene una referencia a su padre y viceversa, o una [http://es.wikipedia.org/wiki/Lista_%28inform%C3%A1tica%29#Lista_Doblemente_Enlazada lista doblemente enlazada] dónde cada elemento mantiene una referencia a su predecesor y el predecesor mantiene una referencia a su sucesor.
 
En estos casos los objetos podrían mantenerse vivos simplemente referenciándose unos a otros, a pesar de que deberían ser liberados. Para romper este ciclo de referencias se pueden usar el modificador '''weak''' para una de las referencias:
 
<source lang=csharp>
class Node {
public weak Node prev;
public Node next;
}
</source>
 
== Propiedad de las referencias ==