[fpc-devel] Feature announcement: Record management operators
    Maciej Izak 
    hnb.code at gmail.com
       
    Mon Mar  7 17:36:19 CET 2016
    
    
  
2016-03-07 17:12 GMT+01:00 Sven Barth <pascaldragon at googlemail.com>:
> Might be, but even then you can commit that separately.
>
> Might be ;)
> Jonas meant that you didn't use "aFoo" inside the body of the
> Initialize/Finalize operators. Is that a copy and paste oversight or does
> that really work? In the latter case: that definitely shouldn't be the case
> then.
>
Oh my... Sorry! This is definitely copy and paste oversight :\ Correct
example code:
===== example begin =====
{$MODE DELPHI}
uses SysUtils;
type
  TFoo = record
  private
    class operator Initialize(var aFoo: TFoo);
    class operator Finalize(var aFoo: TFoo);
  public
    F: Integer;
    S: string;
    P: Pointer;
    C: TObject
  end;
class operator TFoo.Initialize(var aFoo: TFoo);
begin
  aFoo.F := 10;
  aFoo.S := 'FPC rulezzz';
  aFoo.P := nil;
  aFoo.C := nil;
end;
class operator TFoo.Finalize(var aFoo: TFoo);
begin
  if aFoo.S = 'Delphi rulezzz' then
    raise Exception.Create('Trololo');
  FreeMem(aFoo.P);
  aFoo.C.Free;
end;
procedure Foo;
var
  f: TFoo;
begin
  WriteLn(f.F); // output: 10
  WriteLn(f.S); // output: FPC rulezzz
  WriteLn(f.P = nil); // output: true
  WriteLn(f.C = nil); // output: true
end;
begin
  Foo;
end.
===== example end=====
-- 
Best regards,
Maciej Izak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20160307/cfe83ed1/attachment.html>
    
    
More information about the fpc-devel
mailing list