Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Destruir un objeto (https://www.clubdelphi.com/foros/showthread.php?t=85962)

joserosales2015 31-05-2014 02:11:42

Destruir un objeto
 
Hola amigos, tengo el siguiente problema, cuando creo mi propia clase TCar heredada de TObject, le implemento algunos atributos, luego lo creo como es usual: Carro := TCar.Create;
El problema es cuando trato de destruirlo, después de llamar a Carro.Free;, sigo teniendo acceso a sus atributos y los puedo modificar y no me muestra ningún error, por lo que creo que no se ha eliminado del todo. He probado también con Carro.Destroy; y nada. Espero que me ayuden. Gracias.

ecfisa 31-05-2014 04:33:32

Hola joserosales2015, bienvenido a Club Delphi :)

Sucede que luego de liberar la instancia de la clase TCar, el objeto (o apuntador) Carro no ha sido señalizado como nulo, por lo que todavía permite su utilización.

Te pongo un código muy simple comentado que grafica la situación:
Código Delphi [-]
type
  TNum = class(TObject)
    numero: Integer;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  o: TNum;
begin
  o:= TNum.Create;  // se crea una instancia de TNum 
  o.numero:= 1234;  // se da valor a un atributo
  ShowMessage(IntToStr(o.numero)); // Se muestra 1234
  o.Free;                          // Se libera la instancia
  o.numero:= 555;                  // El puntero aún no es nulo
  ShowMessage(IntToStr(o.numero)); // Se muestra 555
  o:= nil;                         // El apuntador se pone a nulo
  o.numero:= 333;                  // ¡¡¡ Error !!! Operacion de puntero inválida
Podes nulificar un puntero u objeto de ese modo, o en un solo paso mediante el procedimiento FreeAndNil:
Código Delphi [-]
  FreeAndNil(o);

Por último, como a todos los que ingresan, te invitamos a leer nuestra guía de estilo.

Saludos :)


La franja horaria es GMT +2. Ahora son las 10:15:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi