Ver Mensaje Individual
  #2  
Antiguo 13-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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:
Código Delphi [-]
mar.Free;
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;  // TRecuadro
  mar.Dibujar(PaintBox1);
  mar.Free;
  edit2.Text:= mar.ClassName;  // ¡ Error !
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:
Código Delphi [-]
  mar.Free;
  mar := nil;

ó:
Código Delphi [-]
  FreeAndNil(mar);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita