Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2005
adlfv adlfv is offline
Miembro
 
Registrado: may 2005
Posts: 39
Poder: 0
adlfv Va por buen camino
Duda sobre creación de clase (Free y Destroy)

Hola a todos.

Estoy haciendo una clase, y la verdad tengo poca experiencia creando clases y componentes, pues solía usarlas más que crearlas... Y al crearlas, uno "vé" otras cosas que no veía antes... Mi duda es sobre la redefinición de métodos. Concretamente Destroy, y si debo redefinir también el método Free.

Código:
 type
   TTipoHabitacion = class(TObject)
   private
 	FId: string;
 	FNota: TStrings;
 	FPrefijo: string;
   public
 	constructor Create;
 	destructor Destroy; override;
 	property Id: string read FId;
 	property Nota: TStrings read FNota;
 	property Prefijo: string read FPrefijo;
   end;
   
   TTiposHabitaciones = class(TObject)
   private
 	FLista: TStrings;
 	function GetItems(Index: Integer): TTipoHabitacion;
   public
 	constructor Create;
 	destructor Destroy; override;
 	procedure Actualizar;
 	property Items[Index: Integer]: TTipoHabitacion read GetItems; default;
 	property Lista: TStrings read FLista;
   end;
TTiposHabitaciones es una lista con los tipos de habitación (por ejemplo, sencilla, doble, triple...). Como base para la lista, empleo un TStrings, donde el índice de la lista es numérico (más adelante también quiero incluir por tipo como tal, osea, Tipos['sencilla'].Prefijo...)

Ahora incluyo el código de la implementación (resumido) de TTiposHabitaciones:

Código:
 constructor TTiposHabitaciones.Create;
 begin
   inherited Create;
   FLista := TStringList.Create;
   Actualizar;
 end;
 
 destructor TTiposHabitaciones.Destroy;
 begin
   inherited Destroy;
 end;
 
 procedure TTiposHabitaciones.Actualizar;
 var
   I: Integer;
   Qry: TMiQuery;
   TH: TTipoHabitacion;
 begin
   try
 	Lista.Clear;
 	// Aqui debo liberar FLista, incluido los objetos que ésta posea
 	 // Sé que debo usar Free, pero si Free no lo he redefinido,
 	 // Cómo se libera la lista realmente?
 	Qry := BD.QryNuevo;
 	with Qry do
 	begin
 	  Close;
 	  SQL.Clear;
 	  SQL.Add('SELECT *');
 	  SQL.Add('FROM TiposHab');
 	  Open;
 	  for i := 1 to RecordCount do
 	  begin
 		TH := TTipoHabitacion.Create;
 		TH.FID := FieldByName('Id').AsString;
 		TH.FPrefijo := FieldByName('Prefijo').AsString;
   //	  TH.FNota := ...
 		Lista.AddObject(TH.FID, TH);
 		Next;
 	  end;
 	end;
   finally
 	Qry.Free;
   end;
 end;
 
 function TTiposHabitaciones.GetItems(Index: Integer): TTipoHabitacion;
 begin
   Result := TTipoHabitacion(FLista.Objects[Index]);
 end;
La duda es que en el método Actualizar debo liberar la lista primero si tiene alguna información. He leido que se debe usar Free en lugar de Destroy, porque Free llama a Destroy, pero no debería entonces redefinir Free también? Entonces en el destructor tendría que poner algo así?

Código:
 destructor TTiposHabitaciones.Destroy;
  begin
   FLista.Free;
    inherited Destroy;
  end;
Pero y qué pasa con los objetos asociados a la lista? Se liberan también? Porque voy almacenando objetos del tipo TTipoHabitación a medida que leo de la base de datos. Tal vez debería redefinir el método Clear?

Estoy medio confundido con eso . Si alguien me pudiera echar una manita, le estaría muy agradecido.

Muchas gracias de antemano.

Un cordial saludo a todos
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:22:00.


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