¿Que pasa con los new?

16/08/2004 - 02:18 por 44r0x0r44 | Informe spam
Hace poco que me he iniciado en VB.NET y en los códigos de
ejemplo que he podido ver observo que se usa bastante
indiscriminadamente el "new"

Application.Run(new F) '¿quien referencia a F?

Vale que queda muy bonito, pero en códigos así no veo
ningún delete F; el siguiente ejemplo es peor:

apt(y) = Nothing

apt es una matriz de clases Point que han sido creadas a
traves de ciertas posiciones del mouse: apt(y) = new
Point(mea.X, mea.Y), si ahora igualo apt(y) a Nothing ¿que
pasa con el punto que estaba almacenado en apt(y)? ¿queda
flotando en el limbo de la memoria? ¿que garantias tengo
que el recolector de basuras se lo cargue?, no se como
funciona esto de la memoria dinamica en VB.NET ¿alguien me
puede aclarar estas dudas?

Muchas gracias

Preguntas similare

Leer las respuestas

#6 Eduardo A. Morcillo [MS MVP VB]
17/08/2004 - 22:01 | Informe spam
Insisto: ¿Que pasa con el punto [44,44] que fué creado
dinamicamente?, y ocupó memoria, y estaba referenciado por pt.



[44, 44] no esta almacenado en algun lugar de la memoria y referenciado por
pt. Como Point es una estructura y por lo tanto un tipo por valor la
variable en si contiene los datos y no una referencia. Es decir, pt reserva
el espacio en memoria y no importa cuantas asignaciones hagas sobre pt los
datos se guardaran siempre en el mismo espacio de memoria.

Pt no es lo que en C llamamos "puntero" porque puede acoger
tanto el resultado de New como un valor directo, pero si
fuese un puntero y hubiese estado apuntando a "New
Point(44,44)" al igualarlo a "Empty()" ¿se habrá quedado
"New Point(44,44)" flotando en la memoria?



¿Importa realmente que pasaria si pt fuera lo que no es?

Estoy confuso con la dualidad puntero/no puntero de las
variables de VB.



No hay dualidad. Ninguna variable es puntero ya que VB no maneja punteros.
Lo que si tienes (y no es cosa de VB sino de la plataforma .net) son tipos
por valor (los basicos, las enumeraciones y las estructuras) y tipos por
referencia (el resto de las clases). Los tipos por valor se almacenan
directamente en la variable (en la pila si son locales) mientras que los
tipos por referencia no se almacenan en las variables sino que se almacena
una referencia (puntero si quieres llamarlo asi) al objeto. Cuando asignas a
una variable o pasas a un metodo un tipo por valor se crea una copia y se
almacena en la variable. Con un tipo por referencia lo que se hace es una
copia de la referencia y no del objeto.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#7 44r0x0r44
18/08/2004 - 21:36 | Informe spam
Insisto: ¿Que pasa con el punto [44,44] que fué creado
dinamicamente?, y ocupó memoria, y estaba referenciado




por pt.

[44, 44] no esta almacenado en algun lugar de la memoria y


referenciado por
pt. Como Point es una estructura y por lo tanto un tipo


por valor la
variable en si contiene los datos y no una referencia. Es


decir, pt reserva
el espacio en memoria y no importa cuantas asignaciones


hagas sobre pt los
datos se guardaran siempre en el mismo espacio de memoria.

Pt no es lo que en C llamamos "puntero" porque puede acoger
tanto el resultado de New como un valor directo, pero si
fuese un puntero y hubiese estado apuntando a "New
Point(44,44)" al igualarlo a "Empty()" ¿se habrá quedado
"New Point(44,44)" flotando en la memoria?



¿Importa realmente que pasaria si pt fuera lo que no es?

Estoy confuso con la dualidad puntero/no puntero de las
variables de VB.



No hay dualidad. Ninguna variable es puntero ya que VB no


maneja punteros.
Lo que si tienes (y no es cosa de VB sino de la plataforma


.net) son tipos
por valor (los basicos, las enumeraciones y las


estructuras) y tipos por
referencia (el resto de las clases). Los tipos por valor


se almacenan
directamente en la variable (en la pila si son locales)


mientras que los
tipos por referencia no se almacenan en las variables sino


que se almacena
una referencia (puntero si quieres llamarlo asi) al


objeto. Cuando asignas a
una variable o pasas a un metodo un tipo por valor se crea


una copia y se
almacena en la variable. Con un tipo por referencia lo que


se hace es una
copia de la referencia y no del objeto.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo



Por fin una respuesta clara, gracias Eduardo por sacarme de
mi error de la "dualidad" variable/puntero de VB.

Si lo he entendido bien...

Dim pt as Point
pt = New Point(44,44)

Estas dos instrucciones en primer lugar crean una variable
tipo Point con (supongamos) 8x2bytes reservados para ella y
posteriormente al hacer la asignación NO se crea otro punto
dinamicamente sinó que los valores [44,44] rellenan pt ya
que pt es una variable tipo Point no un "puntero" a point.
Entoces... no hace falta el New.

Perdona mi terquedad en el tema pero me interesan mucho
estos procesos de "bajo nivel" para saber que puede estar
pasando en mis programas.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida