A ver,
borrón y cuenta nueva.
Creo que ya veo por donde va la preocupación de
Donald. A él no le inquieta la llamada a Destroy, sino la misma llamada a
nil.Free.
Pero creo que hay que recordar que un objeto no es un
record. ¿Qué pasa cuando se llama
nil.Free? El compilador genera esta llamada:
Código:
mov eax, [eax + ...]
call TObject.Free
Esto es, la función que se llama es TObject.Free que vive en algún lugar de la tabla de métodos de la clase (no el objeto) TObject. Aquí no hay problema entonces, porque TObject
existe independientemente de sus instancias. Y a Free se le pasa el parámetro Self que menciona
Al, que es la instancia a la que se le aplica el método. Y es ya Free el que protege la llamada al destructor.
// Saludos