Ich habe mir gerade das Stammtisch AVI über die Typisierten bzw. Untypisierten Variablen angesehen.
Der Protagonist hat da eine Bemerkung über Tlist abgegeben die mir ein bisschen missfällt. Frei Zitiert findet er Tlist, deswegen nicht so überzeugen, weil Tlist Speicherplätze im Vorrat für sich beansprucht.
Bei Verketten-Listen kann ich nicht direkt über einen Index auf den Datensatz zugreifen. Mir ist nicht bekannt wie das ohne Tlist gehen soll. Im Zweifen muss man alle Datensätze druchlaufen um den richtigen zu finden. Auch beim Sortieren ohne Tlist, ich brauche mit den Ding nur die Adr. zu tauschen, anders tun sich einige Probleme auf.
Ich finde Tlist ist eine feine Sache.
Allerdings hat der Protagonist auf eine Sache aufmerksam gemacht, die ich so noch nie betrachtet hatte. Und zwar das strings mir Speicherlecks machen können. Folgenden
Standart nutze ich in der Regel.
Muss ich dort meine Strings auf doppelt Null setzen um keine Leckes zu haben? Und wie ist das bei z.B. normalen integer Variablen. Der Speicher wird im Zweifeln immer noch den Wert haben auch wenn darauf kein Zeiger zeigt. Bleib da jetzt ein Leck und wenn ja wie kann man das verhindern.
Delphi-Quellcode:
type
PDateiListRec = ^TDateiListRec;
TDateiListRec = packed record
SRec : TSearchRec
Pfad : string;
DateiName : string;
….
end;
var
FdateiRecList : Tlist;
procedure TDhDrive.ListRec_Delete(Index:integer);
begin
if not Assigned(FDateiRecList) or (not FDateiRecList.Count > 0) then Exit;
Dispose(PDateiListRec(FDateiRecList[Index]));
with FDateiRecList do
begin
Delete(Index);
Pack;
Capacity := Count;
end;
end;
//--------------------------------------------------------------------------------------------------
procedure TDhDrive.ListRec_Clear;
begin
while FDateiRecList.Count > 0 do ListRec_Delete(0);
FDateiRecList.Clear;
end;
//--------------------------------------------------------------------------------------------------
procedure TDhDrive.ListRec_Free;
begin
ListRec_Clear;
FreeAndNil(FDateiRecList);
end;
//--------------------------------------------------------------------------------------------------
procedure TDhDrive.ListRec_Add(Directory:string;SR:TSearchRec);
var;
P : pointer;
begin
with SR do
begin
P := new(PDateiListRec);
FillChar(PDateiListRec(P)^, SizeOf(PDateiListRec(P)^), 0);
with PDateiListRec(P)^ do
begin
SRec := SR;
FDateiRecList.Add(P);
end;
end;
Wenn man nicht weiß was man sucht, findet man auch mit Google nichts.
Bevor ich hier eine Frage stelle, wurde Google vorher befragt. Hinweise dieser Art kann man sich schenken. Im übrigen muss mir niemand antworten.