[fpc-pascal]Dynamic Arrays (Pointers)
memsom at interalpha.co.uk
memsom at interalpha.co.uk
Fri Jan 24 14:53:01 CET 2003
> Would someone be so kind as to show me an example of using dynamic
> arrays of an object, creating new objects on the fly in code and
> disposing of them when they're no longer needed. Use of this would be in
> a irc services program I'm porting to linux from delphi (windows), ie:
> new nick joins server, create new object respresenting that nick...
To be honest, I would advise using a TList. This will do all the donley work
for you, and even has a nice method 'pack' that will remove dead pointers for
you. It doesn't sound like you need uber speed or anything, so even though the
TList does add a slight performance hit over a dynamic array, the pro's
outweigh the cons. All you would do is something like this, (TMYCLASSTYPE would
be replaced with yout TObject descendent):
TWrapList = class
private
FList: TList;
protected
procedure SetListValue(Value: TMYCLASSTYPE); virtual;
function GetListValue(const Index: integer): TMYCLASSTYPE; virtual;
public
property ListValues[index: integer]: TMYCLASSTYPE
read GetListValue write SetListValue;
constructor Create; virtual;
destructor Destroy; override;
function Count: integer;
procedure Add(Item: TMYCLASSTYPE);
procedure Delete(Index: Integer);
end;
constructor TWrapList.Create;
begin
FList := TList.Create;
end;
destructor TWrapList.Destroy;
begin
// NB: remember remove any items left in list....
FList.free;
inherited;
end;
procedure TWrapList.SetListValue(Value: TMYCLASSTYPE);
begin
// NB. range checking will be usefull
FList[index] := Value;
end;
function TWrapList.GetListValue(const Index: integer): TMYCLASSTYPE;
begin
Result := TMYCLASSTYPE( FList[index] );
end;
function TWrapList.Count: integer;
begin
Result := FList.Count;
end;
procedure TWrapList.Add(Item: TMYCLASSTYPE);
begin
FList.Add(Item); //if you make this a finction you can
//return the index here
end;
procedure TWrapList.Delete(Index: Integer);
begin
FList.Delete(Index);
end;
This is a pattern I use all the time. It works well.
Matt
---------------------------------------------
This message was sent using Mistral WebMail.
http://www.mistral.co.uk/
More information about the fpc-pascal
mailing list