Noch mal zum Verständnis: angenommen, ich habe folgenden Typen definiert
Delphi-Quellcode:
type PMyRec = ^TMyRec;
TMyRec = record
Feld1,
Feld2: integer;
end;
Und nun befülle ich eine TList mit lauter PMyRecs. Was geschieht denn nun mit den Records beim Aufruf von Clear?
[edit] Hab gerade mal in den Sourcen von Delphi 5 nachgesehen. Es werden dort lediglich Count und Capacity auf 0 gesetzt.
Delphi-Quellcode:
procedure TList.SetCapacity(NewCapacity: Integer);
begin
if (NewCapacity < FCount) or (NewCapacity > MaxListSize) then
Error(@SListCapacityError, NewCapacity);
if NewCapacity <> FCapacity then
begin
ReallocMem(FList, NewCapacity * SizeOf(Pointer));
FCapacity := NewCapacity;
end;
end;
procedure TList.SetCount(NewCount: Integer);
var
I: Integer;
begin
if (NewCount < 0) or (NewCount > MaxListSize) then
Error(@SListCountError, NewCount);
if NewCount > FCapacity then
SetCapacity(NewCount);
if NewCount > FCount then
FillChar(FList^[FCount], (NewCount - FCount) * SizeOf(Pointer), 0)
else
for I := FCount - 1 downto NewCount do
Delete(I);
FCount := NewCount;
end;
Wenn ich das nun richtig verstehe, wird nur der Speicher, den die jeweiligen
Zeiger verbrauchen, freigegeben. [/edit]