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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
¿Cómo saber si un objeto está ya creado?

Hola, tengo una clase con un método que me sirve para inicializarla, la clase tiene como atributos otros objetos:

Código Delphi [-]
procedure MiClase.Inicializar;
begin
  Self.Atributo1 := cFoo.Create;
  Self.Atributo2 := cBar.Create;
end;

y aunque funciona siempre me gustaría hacer algo así;

Código Delphi [-]
procedure MiClase.Inicializar;
begin
  if Atributo1 ESTA CREADO then
    begin
      Self.Atributo1 := cFoo.Destroy; // o Atributo1 := cFoo.Free;
      Self.Atributo1 := cFoo.Create;
    end
  else
    Self.Atributo1 := cFoo.Create;    
  if Atributo2 ESTA CREADO then
    begin
      Self.Atributo2 := cBar.Destroy; // o Atributo2 := cFoo.Free;
      Self.Atributo2 := cBar.Create;
    end
  else
    Self.Atributo2 := cBar.Create;
end;

¿Cómo puedo saber si un objeto está ya creado? ¿Basta con hacer lo siguiente?

Código Delphi [-]
if Objeto <> nil then
  ShowMessage('El objeto está creado');

Saludos.
Responder Con Cita
  #2  
Antiguo 13-02-2009
Luis F. Orjuela Luis F. Orjuela is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogotá - Colombia
Posts: 68
Poder: 22
Luis F. Orjuela Va por buen camino
Diría que con todos los objetos es los mismo, por ejemplo la clase TForm, que en este pequeño ejemplo seria FFacturar, si no está creado, pues lo crea y ya

if not Assigned(FFacturar) then
FFacturar:=TFFacturar.Create(Self);


Espero te sirva

Un caluroso saludo desde BOGOTA - COLOMBIA
__________________
Ing. LUIS FERNANDO ORJUELA
BOGOTA - COLOMBIA
Responder Con Cita
  #3  
Antiguo 13-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes utilizar Assigned (aunque me temo que al final va a ser lo mismo).

Código Delphi [-]
  if Assigned(miObjeto) then

Y para liberar y asegurarte:

Código Delphi [-]
  FreeAndNil(miObjeto);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 13-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Puedes utilizar Assigned (aunque me temo que al final va a ser lo mismo).

Código Delphi [-] if Assigned(miObjeto) then


Y para liberar y asegurarte:

Código Delphi [-] FreeAndNil(miObjeto);
¿Para liberar he de hacer FreeAndNil(miObjeto); en vez de Objeto.Destroy; o Objeto.Free? ¿No es lo mismo?
Responder Con Cita
  #5  
Antiguo 13-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, si. El FreeAndNil, hace las dos cosas. Libera y apunta a nil.
Así te aseguras de que si porteriormente preguntas if Assigned() funcionará 100%
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 13-02-2009
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Si creas un objeto y luego lo liberas, el puntero seguirá teniendo el valor que tenía.
Por lo tanto, cuando lo liberas, además deberías ponerlo a nil.

Self.Atributo1 := cFoo.Create; // Self.Atributo=0192893
--- Self.Atributo1 := cFoo.Free; // Self.Atributo=0192893
--- FreeAndNil(Self.Atributo1); // Self.Atributo=nil
Responder Con Cita
  #7  
Antiguo 14-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Gracias, a partir de ahora utilizaré FreeAndNil en vez de llamar al método Free.

Saludos.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber si se ha creado un objeto Cecilio Varios 30 15-11-2008 13:11:13
Como saber si me frame esta creado en cierto evento? Albano OOP 2 15-03-2007 23:13:44
Saber si un formulario ya está creado o no. Tecnic2 OOP 2 27-09-2004 13:27:01
Como puedo saber si esta creado un formulario??? Roger OOP 1 13-04-2004 15:57:49
¿Cómo saber si un Form está creado? nesetru Varios 5 09-02-2004 12:59:37


La franja horaria es GMT +2. Ahora son las 13:20:40.


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