[fpc-pascal] Help with TList example

Jean SUZINEAU Jean.Suzineau at wanadoo.fr
Tue Sep 8 14:46:34 CEST 2020


Another way is to declare TMyRec as class instead of record.

In this case, you don't need the  dereference operator ^ .

No need of new and dispose, just Create and Free, as for TMyRecList.

I don't know if there is a better performance when you use a record,
but as far as I know, record/object/new/dispose is just the old syntax 
for the first object oriented programming born with Turbo Pascal 5.5 
around 1989.

The new syntax with class / constructor Create / destructor Free is born 
Delphi 1 around 1995.

Below is your code modified with TMyRec=class

==========================

program Project1;
{$mode objfpc}{$H+}

uses
   SysUtils, Classes;

type
   TMyRec=class
     Value: Integer;
     AByte: Byte;
   end;

   TMyRecList=class(TList)
   private
     function Get(Index: Integer): TMyRec;
   public
     destructor Destroy; override;
     function Add(Value: TMyRec): Integer;
     property Items[Index: Integer]: TMyRec read Get; default;
   end;

{ TMyRecList }

function TMyRecList.Add(Value: TMyRec): Integer;
begin
   Result := inherited Add(Value);
end;

destructor TMyRecList.Destroy;
var
   i: Integer;
begin
   for i := 0 to Count - 1 do
     Items[i].Free;
   inherited;
end;

function TMyRecList.Get(Index: Integer): TMyRec;
begin
   Result := TMyRec(inherited Get(Index));
end;

var
   MyRecList: TMyRecList;
   MyRec: TMyRec;
   tmp: Integer;
begin
   MyRecList := TMyRecList.Create;
   for tmp := 0 to 9 do
   begin
     MyRec:= TMyRec.Create;
     MyRec.Value := tmp;
     MyRec.AByte := Byte(tmp);
     MyRecList.Add(MyRec);
   end;

   for tmp := 0 to MyRecList.Count - 1 do
     Writeln('Value: ', MyRecList[tmp].Value, ' AByte: ', 
MyRecList[tmp].AByte);
   WriteLn('  Press Enter to free the list');
   ReadLn;
   MyRecList.Free;
end.



More information about the fpc-pascal mailing list