![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TList [D7, Win95/98, WinXP]
Simon © (2004-10-06 08:28:00)Подскажите TList уничтожает хранимые элементы или я сам должен удалять их из памяти
Amoeba (2004-10-06 12:32:00) [1]Удалено модератором
Плохиш (2004-10-06 12:29:00) [2]Удалено модератором
begin...end (2004-10-06 12:28:00) [3]Удалено модератором
Sectey (2004-10-06 12:25:00) [4][b]begin...end © [/b]
Вот и получается, что объекты на которые ссылается элемент TList нужно уничтожать вручну. [b]Так?[/b]
begin...end (2004-10-06 12:19:00) [5]
> [21] Sectey © (06.10.04 12:18)
И не увидишь.
Sectey (2004-10-06 12:18:00) [6]:-( Я не вижу здесь кода удаления(уничтожения) объектов на которые указывает элемент списка TList
destructor TList.Destroy;
begin
Clear;
end;
procedure TList.Clear;
begin
SetCount(0);
SetCapacity(0);
end;
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
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;
Плохиш (2004-10-06 12:15:00) [7]Удалено модератором
Плохиш (2004-10-06 12:14:00) [8]Удалено модератором
begin...end (2004-10-06 12:09:00) [9]Удалено модератором
Amoeba (2004-10-06 12:07:00) [10]Удалено модератором
begin...end (2004-10-06 11:57:00) [11]Удалено модератором
Amoeba (2004-10-06 11:56:00) [12]Удалено модератором
begin...end (2004-10-06 11:53:00) [13]Дорогие мои, я ничего не путаю. Я говорю, что TList хранит УКАЗАТЕЛИ. И память, занимаемую УКАЗАТЕЛЕМ (4 байта), он успешно освобождает.
Amoeba (2004-10-06 11:52:00) [14]
> Pentium133 © (06.10.04 11:49) [12]
Если установить необходимое св-во в True - то да!
Pentium133 (2004-10-06 11:49:00) [15]
> Amoeba © (06.10.04 11:47) [11]
А TObjectList сам уничтожает объекты?
Amoeba (2004-10-06 11:47:00) [16]
> begin...end © (06.10.04 11:40) [7]
Ерунда! Хранитьуказатели еще не значит знатькак освободить память, на которую они указывают и уничтожить хранимые элементы. Не надо путать с TObjectList.
Pentium133 (2004-10-06 11:44:00) [17]
> begin...end © (06.10.04 11:40) [7]
Бред
Ничего он не уничтожает.
Мастер (2004-10-06 11:44:00) [18]Удалено модератором
Мастер (2004-10-06 11:44:00) [19]>begin...end © (06.10.04 11:40) [7]
Понятно ведь, что автор топика имел ввиду - некоторые объекты, на которые ссылаются TList.Items.
Остальное - словоблудие.
begin...end (2004-10-06 11:40:00) [20]
> [6] Amoeba © (06.10.04 11:27)
TList уничтожает хранимые элементы, поскольку он хранит указатели :-)