Hola Comandant.
Aunque delphi te ofrece el "azúcar sintáctico" de omitirlo, la definición completa tu clase es:
Código Delphi
[-]
type
TRecuadro = class(TObject)
private
FRect: TRect;
public
constructor Create;
destructor Destroy; override;
procedure Dibujar(Pain: TPaintBox);
property Recta: TRect read FRect;
end;
lo que indica que
TRecuadro deriva de
TObject, clase de la que, directa o indirectamente derivan todas las clases en
Delphi.
Cuando invocas a:
el destructor heredado se ejecutará (aún sin reescribirlo), como podrás comprobar haciendo unos pequeños cambios en tu código:
Código Delphi
[-]
procedure TForm1.sButton1Click(Sender: TObject);
var mar: TRecuadro;
begin
mar:= TRecuadro.Create;
Edit1.Text:= mar.ClassName; mar.Dibujar(PaintBox1);
mar.Free;
edit2.Text:= mar.ClassName; end;
pero
TObject no tiene conocimiento de las declaraciones ni la memoria que ha ocupado uno de sus descendientes, en esos casos declaras el constructor para poder liberar la memoria que ocupó el descendiente e invocar al destructor heredado. Pero en tu clase sólo hay atributos simples, no veo la necesidad de definir un constructor.
Cuando creas una instancia de clase y la liberas, el apuntador (objeto) mantiene el valor. Entonces si lo que deseas es que no se pueda acceder a ellos, tenes que asignarle
nil, ya sea luego de liberarlo con
Free o usando
FreeAndNil en su lugar:
ó:
Saludos