Ver Mensaje Individual
  #20  
Antiguo 19-08-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por seoane Ver Mensaje
  • Si el metodo Create provoca una excepcion devuleve nil y el metodo destroy del objeto es llamado automaticamente.
Domingo, temo que la primera parte no es así, haz la prueba:

Código Delphi [-]
type
  TObjetoA = class
    constructor Create;
  end;

{ TObjetoA }

constructor TObjetoA.Create;
begin
  raise Exception.Create('Oops!');
end;

...

var
  A: TObjetoA;

begin
  //A := nil;

  try
    A := TObjetoA.Create;
  finally
    A.Free;
  end;
end;

Al menos en Delphi 7, con la línea comentada, la llamada a A.Free genera una violación de acceso, mientras que con la asignación previa a nil no pasa nada.

En resumen, en ese sentido un constructor es como cualquier función; si hay una excepción, la función no devuelve nada y no se puede tomar el valor de retorno.

Creo que esto contesta también a Delphius. El destructor se llama en caso de una excepción, pero no hay asignación implítcita a nil.

// Saludos
Responder Con Cita