Clases vs variables

Los lectores más perceptivos han notado que Delphi utiliza una T para especificar que algo es un objeto.

De hecho, aquí Delphi se parece mucho a C: Un TObjeto es la definición de la clase del objeto, mientras Objeto1 es una variable de tipo TObjeto.

Así, TForm es la clase, pero la variable que usted usa para sus formas se llama Form1. La variable Button1 es un «puntero» a la instancia de clase TButton.

Supongamos que usted tiene el siguiente código en algún lugar de una forma con un botón (como la que acabamos de escribir). No lo intente, esto es teoría:

La definición de variable nos dice que «ElBoton» es una variable que apunta a un objeto de clase TBoton.

Después hacemos que ElBoton «apunte» (recordemos que a final de cuentas son punteros) al Button1 de la forma.

Después liberamos el Button1. Ahora tratamos de cambiar el texto del botón. Obtendremos una de esas horribles «Fallas de protección general». Porque?

Pues es muy sencillo. En la línea Button1.Free, la memoria a la que Button1 apunta es liberada. Ya no nos pertenece porque efectivamente «borramos» el botón.

Pero ElBoton sigue apuntando a la posición de memoria que Button1 apuntaba. Delphi, aunque es un lenguaje muy elegante, es lo suficientemente poderoso para no preguntarnos cuando queremos manipular memoria (Delphi asume, como C++, que nosotros somos el jefe y sabemos lo que hacemos).