Cita:
Empezado por seoane
- 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;
constructor TObjetoA.Create;
begin
raise Exception.Create('Oops!');
end;
...
var
A: TObjetoA;
begin
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