![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola,
Cita:
![]() PD. Por otro lado, estamos usando el método "Free()", que se supone que ofrece cierta seguridad, no como el método "Destroy()", según tengo entendido, que sí que podría causar algún que otro problema. Última edición por dec fecha: 18-08-2008 a las 23:29:08. |
|
#2
|
||||
|
||||
|
¡Vaya! ¡Qué desastre!
![]() Desde el principio, he puesto mal el código. Debería ser: Forma 1:
Forma 2:
Espero disculpen ![]() // Saludos |
|
#3
|
||||
|
||||
|
Hola,
Creo que todos hemos visto bien lo que en realidad estaba mal, porque, enseguida hemos ido a la "idea" del asunto, al "conceto". ![]() |
|
#4
|
||||
|
||||
|
Y bueno, al parecer las formas realmente equivalentes son estas:
Forma anidada:
Forma compacta:
Y yo estaba equivocado. Puesto así, el compilador no genera ningún warning. // Saludos |
|
#5
|
||||
|
||||
|
Esperando no complicar mas las ideas voy aclarando algunas dudas; try crea una instruccion de "salto en caso de error", obviamente "salta" a la primera instruccion de su respectivo finally ejecutando su contenido hasta end; cada try genera un salto distinto para permitir al desarrollador un control más especifico para cada posible error, por ello desde el punto de vista de compilación los casos anidado y "compacto" generan un codigo binario distinto.
Si la excepción es generada dentro del constructor, el valor retornado por el mismo es nulo (puesto que falló durante la creación de la nueva instancia), por ende, el llamado al método en memoria 0.Destroy ó 0.Free generan el mismo error de acceso a una zona de memoria vacía.
En el anterior ejemplo he "sacado" la generación de la excepción del constructor, para demostrar que entre el codigo inicial de Roman y último no es relevante la construcción del objeto, si no el orden construcción/excepción de los objetos. En el caso anidado el control es mayor y más estructurado, como resultado obtenemos un EDivByZero que era justamente lo esperado... lo que difiere al comentar la directiva de precompilación, " // {$define anidado}" obteniendo un EAccessViolation al intentar destruir un objeto "inexistente". Podriamos hacer otro ejemplo no OO, talvez ordenes de apertura y cerrado de archivos de paginación... en tal caso obtendriamos un resultado que al igual que en el ejemplo depende de la estructura del codigo. Saludos Última edición por dec fecha: 19-08-2008 a las 03:21:50. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Try Except --finally-- | Caral | Varios | 13 | 02-10-2006 22:12:24 |
|