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 878:
 
Los punteros de Vala son una forma de permitir la gestión manual de la memoria en los programas. Por regla general, cuando el programador crea una instancia de un tipo se devuelve una referencia a ese objeto, y Vala se encarga de destruir la instancia cuando no haya más referencias a ese objeto, y por lo tanto no sea útil. Si se pide un puntero en lugar de una referencia, será el programador el encargado de destruir la instancia cuando ya no se necesite, y por lo tanto obtendrá un mayor control sobre la memoria que está usando el programa en desarrollo.
 
Esta funcionalidad no se necesita en la mayoría de las ocasiones, puesto que los ordenadores modernos son suficientemente rápidos para manejar las referencias (y el conteo de referencias) y tienen suficiente memoria que las pequeñas problemas de eficiencia que genera la gestión de memoria automática no son importantes. Sin embargo pueden darse algunas situaciones en las cuales será necesario usar la gestión manual de la memoria. Por ejemplo:
 
:* En caso de que el programador quiera optimizar un programa específicamente en el uso de memoria.
:* Cuando el programa trabaja con una biblioteca externa que no implementa el conteo de referencias para la gestión de memoria (probablemente por que no está basada en g-object).
 
Para crear una instancia de un tipo y recibir un puntero a ese nuevo objeto (en lugar de una referencia) se procede de la siguiente forma:
 
<source lang=csharp>
Object* o = new Object();
</source>
 
Para acceder a los métodos y los miembros en general del objeto se usa el operador '''->''':
 
<source lang=csharp>
o->method_1();
o->data_1;
</source>
 
Para liberar la memoria en la que se almacena el objeto (cuando éste ya no sea útil):
 
<source lang=csharp>
delete o;
</source>
 
Vala tiene soporte para los operadores de punteros que se usan en C, es decir, el operador '''dirección de (&)''' y el operador '''[ http://es.wikipedia.org/wiki/Indirecci%C3%B3n indirección] (*)'''
 
== Clases que no heredan de GLib.Object ==