¿Como Destruyo Un Objeto?


Goto page Previous  1, 2

Subject: Re: ¿Como Destruyo Un Objeto?
Creo que seria mas facil de lo que parece.
Si guardas los objetos en una matriz tan solo tendras que llamar a la función remove() del array para quitar un objeto de la matriz.

Dim objObjetos as clsMiClase[]
dim objMiObjeto1 as clsMiClase, objMiObjeto2 as clsMiClase

objmiobjeto1 = new clsmiclase()
objmiobjeto1.proviedad = "HOLA"
objmiobjeto2 = new clsmiclase()
objmiobjeto2.proviedad = "HOLA"

objObjetos.Add(objmiobjeto1)
objObjetos.Add(objmiobjeto2)

objobjetos.remove(1) '<-Va por índice.

Podria servir?

Profile PM  
Subject: Re: ¿Como Destruyo Un Objeto?
maikl escribió: [Ver mensaje]
Creo que seria mas facil de lo que parece.
Si guardas los objetos en una matriz tan solo tendras que llamar a la función remove() del array para quitar un objeto de la matriz.

Dim objObjetos as clsMiClase[]
dim objMiObjeto1 as clsMiClase, objMiObjeto2 as clsMiClase

objmiobjeto1 = new clsmiclase()
objmiobjeto1.proviedad = "HOLA"
objmiobjeto2 = new clsmiclase()
objmiobjeto2.proviedad = "HOLA"

objObjetos.Add(objmiobjeto1)
objObjetos.Add(objmiobjeto2)

objobjetos.remove(1) '<-Va por índice.

Podria servir?


Yo creo que ahí le has dado... porque me supongo que cyberx0x estará almacenando los objetos creados en un array o una colección, por tanto bastaría eliminar o 'remover' los ítems de ese array una vez hayan sido utilizados o mostrados en un control.
También se podría crear un for...each para hacerlo de un tirón, o incluso mejor: array.Clear()

Saludos

Profile PM  
Subject: Re: ¿Como Destruyo Un Objeto?
No es igual un caso que otro y la programación de un control lleva un trabajo previo (tampoco tanto, a maiki le llevó una tarde y eso que él estaba abriendo camino de algo que nadie aquí había hecho antes) pero no es ni parecido a trabajar con un conjunto de tablas y probablemente ocupa menos en memoria.

El día que se quiera añadir algo basta con añadir una propiedad a ese control Como no tengo ni idea de esas cosas pues no se si tendrá sentido lo que digo pero se me ocurre que podría tener una propiedad padre y una propiedad hijo para especificar quien es hijo de quien.

Eso supone un problema añadido porque supone la utilización de algoritmos de inserción de elementos en listas y tal que estudiamos en su día (nada del otro mundo) pero que en el caso de utilizar arrays puede hacerse bastante lioso. No se si es le caso, solo lo menciono para ilustrar la posibilidad de añadir funcionalidades.

Pero bueno cyber0x es quien sabe lo que quiere hacer

Profile PM  
Subject: Re: ¿Como Destruyo Un Objeto?
En general para liberar la memoria que ya no se usa se utilizan dos aproximaciones diferentes:

  • Garbage Collector: se encarga de liberar la memoria que ya no se usa de forma automática y transparente.
  • Refence Counter: es una forma más simple, pero más rápida de liberar la memoria, y es la que usa gambas. En este caso cuando un objeto no tiene una referencia (un puntero hacia ese objeto) se elimina automáticamente. El inconveniente es que como programador debes controlar las referencias que haces a una misma instancia (objeto) y que no estés creando un ciclo.


Entonces, cuando instancias una clase en gambas estás creando un puntero (una referencia) hacia esa instancia. Si de-referencias el objeto, adiós objeto.

'la variable miobjeto es un puntero hacia la nueva instancia de miclase
miobjeto = NEW miclase
'ahora el contador de referencias del objeto es igual a 1 (suponiendo que en ningun otro lugar del programa se creó una instancia de miclase)

...

'Para eliminar la refencia al objeto:
miobjeto = NULL
'Ahora el contador de referencias del objeto es igual a 0 y gambas liberará la memoria que ocupa inmediatamente.

Subject: Re: ¿Como Destruyo Un Objeto?
según eso tu puedes poner Miobjeto=null al igual que en vb se hacía set objeto=nothing?

¿Estas diciendo eso?

¡Mañana lo pruebo!


Profile PM  
Subject: Re: ¿Como Destruyo Un Objeto?
Entonces si la variable es local a una función, al salir de la función se destruye la variable como si hiciésemos "=NULL".
Pero si dentro de la función se ha igualado una variable externa al objeto que representaba la variable local, como el objeto aún tiene un apuntador no se eliminará.
Cuando hagamos "varglobal = NULL" será cuando no queden mas apuntadores al objeto y este se libere.
Entonces como VB6.
Entre el garbage collector y este método prefiero este, más rápido a la hora de liberar la memória, sin ningun proceso corriendo por ahí buscando cachos perdidos para liberarlos. Alguien sabe las ventajas del garbage collector? a parte de solucionar descuidos del programador.
Que bonito es aprender!

Profile PM  
Goto page Previous  1, 2

Page 2 of 2


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.0986s (PHP: -30% SQL: 130%)
SQL queries: 23 - Debug Off - GZIP Enabled