On 02.02.2023 11:00, Michael Van Canneyt via fpc-devel wrote:
In userspace, the best seems
Function FreeAndNil<T :TObject>(Obj : T) : T;
begin
Obj.Free;
Result:=Nil;
end;
With automatic type inference for generics, this allows you to do
A:=FreeAndNil(A);
Michael, bringing your idea to the next step, FPC can do it !!!
program test;
{$mode objfpc}{$h+}
{$modeswitch ImplicitFunctionSpecialization}
generic procedure FreeAndNil<T: TObject>(var Obj: T);
var
Temp: TObject;
begin
Temp := Obj;
Obj := nil;
Temp.Free;
end;
type
TSomeObject = class(TObject);
var
X: TSomeObject;
begin
X := TSomeObject.Create;
FreeAndNil(X);
if Assigned(X) then
Writeln('assigned')
else
Writeln('nil');
ReadLn;
end.
-----
Delphi cannot do it. FPC rocks!
The only disadvantage is that you get a FreeAndNil copy for every type
you pass into the parameter (?)
Do we want to change it in SysUtils? :)
Ondrej
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel