Der Hauptfehler liegt bei TFunctionList.getFunction(). Dann würde ich noch statt ^TFunction ein PFunction definieren:
Delphi-Quellcode:
type
//...
PFunction = ^TFunction;
TFunction = class(TObject)
private
//...
Delphi-Quellcode:
function TFunctionList.getFunction(i : Integer) : TFunction;
var
aFunction : PFunction;
begin
aFunction := FFunctions.Items[i];
result := aFunction^;
end;
Desweiteren würde ich noch addFunction() ändern um Konflikte zu vermeiden, wobei sich Destroy und deleteFunction() dann auch ändert:
Delphi-Quellcode:
destructor TFunctionList.destroy();
var
aFunction : PFunction;
i : Integer;
begin
inherited destroy;
// Alle wieder freigeben...
for i:=0 to FFunctions.Count-1 do
begin
aFunction := FFunctions.Items[i];
aFunction^.Destroy; // Funktion freigeben
Dispose(aFunction);
FFunctions.Delete(i);
end;
FreeAndNil(FFunctions);
end;
function TFunctionList.addFunction: TFunction;
var
aFunction : PFunction;
begin
New(aFunction);
with aFunction^ do
begin
aFunction^ := TFunction.Create; // Funktion erstellen
end;
FFunctions.Add(aFunction);
result := aFunction^;
end;
procedure TFunctionList.deleteFunction(Value: Integer);
var
aFunction : PFunction;
begin
aFunction := FFunctions.Items[Value];
aFunction^.Destroy; // Funktion freigeben
Dispose(aFunction);
FFunctions.Delete(value);
end;
Desweiteren solltest du noch bei TFunction und TFunctionList den Destroy mit
override deklarieren.