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 697:
 
Un programa equivalente en C# o Java no tendría ningún problema, por que el recolector de basuras puede detectar estos ciclos en las referencias en tiempo de ejecución. Pero Vala esto no lo realiza (por que no hay recolector de basuras) y el programador debe tener en cuenta este tipo de problemas.
 
La forma de romper el ciclo es mediante la definición de alguna de las referencias como una referencia débil ('''weak'''):
 
<source lang=csharp>
public weak Node prev;
public Node next;
</source>
 
Este modificador hace que la asignación de esta variable no haga que su contador de referencias se incremente en 1. De esta forma uno de los nodos tendrá un contador de referencias de 1 en lugar de 2, por lo que cuando finalice el programa se eliminará esa referencias y el contador de referencias alcanzará el valor de 0, por lo que se liberará la memoria que ocupaba ese nodo. Esto al provocar que todas las referencias que contenía el nodo se eliminen, hará que se produzca un efecto cascada liberando de memoria todos los nodos que había.
 
== Propiedad de las referencias ==