![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
Hasta donde alcanzo a ver, sí es posible, siempre y cuando inicialicemos a nil todas las variables. // Saludos |
|
#2
|
||||
|
||||
|
Hola disculpen que me meta donde no me llamen, no se si se deba a que estoy un tanto dormido, pero no termino de comprender a lo que se desea llegar.
No conozco demasiado, pero tengo entendido que una máxima de la programación dice "un objeto o se crea o no crea, no puede ser creado a medias". Si ocurre un error durante la creación de un objeto tiene lugar el evento destructor para limpiar la memoria, por tanto quedará la variable quedará apuntando a nil. Tengo entendido, por favor corrijanme o tirenme de la oreja si me equivoco, que el método create no provoca ninguna excepción por lo que incorporar la sentencia
dentro de un Try está demás. No puede esperarse capturar una excepción en Create, más bien se puede capturar cuando se desea hacer uso de algún método y/o acceder a una propiedad. De modo que la excepción que obtendremos es ese famoso EAccessViolation. En síntesis, yo lo veo así:
Repito nuevamente, no se si es eso lo que se trata de ver aqui. La verdad es que me sentí un tanto confundido cuando leía este hilo. Mas yo posteo aqui por curiosidad y por un tirón de orejas para ver si logro aprender el tema que se está debatiendo. Saludos, |
|
#3
|
|||
|
|||
|
Hola, solo una duda
¿porque esta asignación? ¿si falla el create, o incluso si no llega, no estan apuntando A y B a 0x0000 desde el principio? PD : Vale, ahora lo lei... claro esta que con freemem(A) no harian falta. No, tampoco funciona si que se tiene que asignar. Última edición por coso fecha: 19-08-2008 a las 09:56:48. |
|
#4
|
||||
|
||||
|
Pues a mi las dos construcciones que pone roman en el post numero 11 me parecen correctas. Yo escogeria siempre la primera, sobre todo porque estoy mas acostumbrado a hacerlo así, pero ambas son tecnicamente correctas.
Solo aclarar un par de cosas:
|
|
#5
|
||||
|
||||
|
Cita:
Al menos en Delphi 7, con la línea comentada, la llamada a A.Free genera una violación de acceso, mientras que con la asignación previa a nil no pasa nada. En resumen, en ese sentido un constructor es como cualquier función; si hay una excepción, la función no devuelve nada y no se puede tomar el valor de retorno. Creo que esto contesta también a Delphius. El destructor se llama en caso de una excepción, pero no hay asignación implítcita a nil. // Saludos |
|
#6
|
||||
|
||||
|
Y tienes razon. De la segunda parte estaba seguro, sobre todo porque asi viene en la documentacion de delphi, pero con respecto a lo primero estaba equivocado. No hacen falta pruebas, es completamente logico que si se provoca una excepcion la funcion no devuelva ningun resultado, no se en que estaba pensando
![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Try Except --finally-- | Caral | Varios | 13 | 02-10-2006 22:12:24 |
|