Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TList [D7, Win95/98, WinXP]


Страницы:   1 2

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 уничтожает хранимые элементы, поскольку он хранит указатели :-)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо