Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Create(Nil) o Create(Self) (https://www.clubdelphi.com/foros/showthread.php?t=67542)

JerS 22-04-2010 06:15:24

Create(Nil) o Create(Self)
 
Buenas amigos tengo la siguiente duda, yo se que si se crea un objeto de forma Nil, no pertenece al formulario y nosotros tenemos que liberar la memoria a pie! y si lo creamos Self, pertenece al Form y el liberara el espacio en memoria al ser cerrado, de todas maneras tengo la duda de cual es mejor por ejemplo a la hora de usar un objeto de tipo TZquery

porque por lo general lo he visto de la siguiente forma

Código Delphi [-]
Zq1:=TZQuery.Create(Nil);

ecfisa 22-04-2010 08:29:31

Hola.

Esto creo que es regla de oro para cualquier componente:

Si lo creas en el programa principal y queres destruirlo al finalizar la aplicación usa Application , si lo creas en otro Form y queres que se destruya al destruirse este, usa Self. Ahora si liberarlo depende de algún otro evento o situación usa nil, así te aseguras evitar errores por liberar dos veces el componente.

Saludos.

Neftali [Germán.Estévez] 22-04-2010 09:54:17

Como tú bien has dicho el resultado final es el mismo si se hace bien.

Si dejas que el formulario destruya el elemento estás dejando esa tarea para cuando se cierre el formulario y la mayoría de las veces no es necesario esperar tanto.

Salvando ese caso, lo normal será que destruyas el objeto cuando ya no lo necesitas, de ahí que la forma que suelo utilizar es:
Código Delphi [-]
  XX.Create(nil);
  try
    ...
    ...
  except
    XX.Free;
  end;

Casimiro Noteví 22-04-2010 11:41:12

Creo que será 'finally' y no 'except', porque si no ocurre ninguna
'exception' no se eliminará de la memoria correctamente

Código Delphi [-]
XX.Create(nil);
try
  ...
  ...
// except
finally
  XX.Free;
end;

También puede ser que esté dormido y me esté confundiendo, voy a tomarme un café :D

defcon1_es 22-04-2010 13:15:49

Fuera dudas: Nil, Self, Application
 
En su blog, Zarko Gajic explica (en inglés) con detalle este tema.

roman 22-04-2010 16:06:42

Cita:

Empezado por Casimiro Notevi (Mensaje 361517)
Creo que será 'finally' y no 'except', porque si no ocurre ninguna
'exception' no se eliminará de la memoria correctamente

Es que el código de Neftali es un código pesimista: presupone que siempre saldrá mal algo :D

// Saludos

Casimiro Noteví 22-04-2010 16:57:38

Cita:

Empezado por roman (Mensaje 361534)
Es que el código de Neftali es un código pesimista: presupone que siempre saldrá mal algo :D
// Saludos

Es que Neftalí debe ser admirador acérrimo de Murphy :)

Neftali [Germán.Estévez] 22-04-2010 18:49:08

Código Delphi [-]
XX.Create(nil);
try
  ...
  ...
finally
  XX.Free;
end;
Cita:

Empezado por Casimiro Notevi (Mensaje 361517)
También puede ser que esté dormido y me esté confundiendo..

Gracias Casimiro. Eso exactamente es lo que quería decir.
Está claro que el que está dormido soy yo... ;)


La franja horaria es GMT +2. Ahora son las 00:15:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi