Incluso si no parece ser muy diferente de lo gratuito, que le ayudará mucho más tarde mientras que la caza de insectos su código.
Simplemente piense qué sucede si NO usa FreeAndNil y luego en algún lugar de su código accede a un objeto liberado. Si tiene una mala suerte, su programa se bloqueará cuando se ejecute en casa (sí, eso es un accidente 'bueno'). Si tiene un poco de mala suerte, se bloqueará en la computadora del cliente. ¡Entonces comienza el verdadero dolor!
Como ya han señalado otros, el FreeAndNil en sí no está nada mal. La función FreeAndNil no está rota/obsoleta o algo así y no dañará su código. Algunos argumentarán que confiar en FreeAndNil puede conducir o indicar un defecto de diseño.
Uso FreeAndNil EVEN en una variable local. Su uso en una variable local parece SIN PUNTO, ya que la variable desaparece tan pronto como sale del procedimiento. Sin embargo, es una buena práctica que solo le costará unos pocos bytes adicionales. Piense que puede agregar más código al final del procedimiento, DESPUÉS del punto donde liberó el objeto, código que (obviamente accidentalmente) intentará acceder al objeto liberado. Si el objeto era NIL, BABUM, AV instantáneo (example).
Nota: Algunas personas pueden decir que nunca accedieron a ningún objeto gratis (lo que significa que nunca cometerán errores) por lo que no necesitan FreeAndNil en este caso. Bueno, no soy un robot. Yo hago errores.
Algunas personas conservadoras pueden decir que esta simple llamada desperdiciará recursos de RAM y CPU. Nunca diré que la conservación de la memoria/CPU es mala. ¡Me gusta entregar aplicaciones pequeñas/rápidas/monolíticas también!Pero no creo que eliminar usando FreeAndNil desperdicie más de unos pocos bytes y ciclos de CPU (literalmente pocos). No marcará una diferencia real en la vida cotidiana, especialmente cuando crees que un solo recurso gráfico como un glifo TButton o el ícono de tu programa puede tomar de 50 a 300 KB, y tu programa puede tener docenas de estos.
Pros
Mason Wheeler ya apunta a un artículo que muestra el método de 'creación perezosa' que utiliza FreeAndNil que todos utilizamos un día: http://tech.turbu-rpg.com/106/delphi-memory-management-made-simple
Contras
Allen Bauer muestra aquí un ejemplo de cómo usar el FreeAndNil en el caso a DETERMINADO (destructor de un componente visual) y ser realmente malo: http://blogs.embarcadero.com/abauer/2010/02/16/38916
Allen afirma que FreeAndNil debe reemplazarse por mejores métodos. Por ejemplo, con FastMM. Sin embargo, aquí hay un código simple donde FastMM falla mientras FreeAndNil guarda el día: http://codeverge.com/embarcadero.delphi.rtl/freeandnil-to-use-or-not-to-use/1067733
Dado que existen dos argumentos pro y en contra de FreeAndNil, le corresponde a usted decidir si le gusta o no.
Una discusión extendida aquí: https://forums.embarcadero.com/thread.jspa?threadID=33112 –
@Sertac el hilo, como muchos otros, desapareció – mjn
Las nuevas discusiones son sobre no tecnología [aquí] (https: //forums.embarcadero.com/thread.jspa?threadID=65321&tstart=15) y [aquí] (https://forums.embarcadero.com/thread.jspa?threadID=63906&tstart=0) – mjn