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

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

TList, освобождение [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

digger ©   (2004-08-30 11:34:00) 

Уважаемые участники форума. Вот какой возник вопрос. Когда я добавляю новые элементы в список (TList):

var
 p: ^TMyType;
 list: TList;
begin
 list := TList.Create;
 new(p);
 list.Add(p);
end;

Если вызвать метод Clear для списка, то освободит ли он память от переменных моего типа или их необходимо освобождать вручную?


Гаврила   (2004-08-30 13:09:00) [1]


> DesWind ©   (30.08.04 12:50) [21]


А что там особо мучиться то... Вроде особых мучений не видно.


DesWind   (2004-08-30 12:50:00) [2]

Если надо сделать список из TPoint тогда не стоит


DesWind   (2004-08-30 12:48:00) [3]

>>в том смысле что стоит хранить уже как объекты в TObjectList, >>чтоб мучаться с выделением и освобождением памяти.

VMcL ©
>Зачем? Чтобы юзеру памяти много не казалось?

Ну это уже решать по ходу дела. Все обдумать и взвесить. Стоит это делать или нет.


VMcL   (2004-08-30 12:42:00) [4]

>> DesWind ©  (30.08.04 12:36) [17]

Зачем? Чтобы юзеру памяти много не казалось?


DesWind   (2004-08-30 12:37:00) [5]

точнее не мучиться


DesWind   (2004-08-30 12:36:00) [6]

Гаврила ©   (30.08.04 12:25) [14]
в том смысле что стоит хранить уже как объекты в TObjectList, чтоб мучаться с выделением и освобождением памяти.


begin...end   (2004-08-30 12:34:00) [7]

> [12] DesWind ©   (30.08.04 12:20)

Что-то я не пойму.
Во-первых, как Вы собираетесь засунуть record в TObjectList?
Во-вторых, Вы полагаете, что TObjectList будет, в случае необходимости, вызывать метод Free для PMyType? Откуда же там возьмётся этот метод?


pasha_golub   (2004-08-30 12:33:00) [8]

Гаврила ©   (30.08.04 12:25) [14]
TRecordClass = class
Rec: TRecord;
end;

:0)


Гаврила   (2004-08-30 12:25:00) [9]


> Если TMyType это запись и т.п. то имеет смысл хранить в
> TObjectList, для удобочитаемости кода, и простоты.


????
как это запись хранить в TObjectList ???


Суслик   (2004-08-30 12:22:00) [10]


> Ega23 ©   (30.08.04 11:45) [6]
> begin...end ©   (30.08.04 11:38) [4]
>
> Предпочитаю явно указать. Стиль такой...

правильно делаешь, товарысч.

указывая явно тип ты даешь возможность компилытору построить правильный код, где будет не только освобождена память из под записи, но и проведена корректная файнализация области памяти...


DesWind   (2004-08-30 12:20:00) [11]

To begin...end © [10]
Если TMyType это запись и т.п. то имеет смысл хранить в TObjectList, для удобочитаемости кода, и простоты.


digger   (2004-08-30 12:16:00) [12]

Спасибо всем.


begin...end   (2004-08-30 12:06:00) [13]

> [9] DesWind ©   (30.08.04 12:03)

Из поста [0] я не вижу, что автор хочет в списке хранить объекты.


DesWind   (2004-08-30 12:03:00) [14]

А лучше TObjectList меньше проблем он может освобождать может не освобождать в зависимости от Create(true|false)


Ega23   (2004-08-30 11:52:00) [15]

Тьфу... Ну все поняли, что PMyType=^TMyType, и что PMyType(Items...)

Опечатка...


VMcL   (2004-08-30 11:49:00) [16]

>> Ega23 ©  (30.08.04 11:45) [6]

Он не об этом. Тип неправильный.


Ega23   (2004-08-30 11:45:00) [17]

begin...end ©   (30.08.04 11:38) [4]

Предпочитаю явно указать. Стиль такой...


VMcL   (2004-08-30 11:40:00) [18]

>> digger ©  (30.08.04 11:34)

Обычно, в таких случаях пишется наследник TList'а, в котором перекрывается метод Notify. В Notify() при условии, что вид операции - удаление из списка, память, выделенная для элемента, освобождается.

procedure TMyList.Notify(Ptr: Pointer; Operation: ...);
begin
 if (Ptr <> nil) and (Operation = lnDeleted) then
    // освобождаем память, в твоем случае:
    Dispose(PMyType(Ptr));
end;


begin...end   (2004-08-30 11:38:00) [19]

> [3] Ega23 ©   (30.08.04 11:36)

> Dispose( TMyType(List.Items[i]);

?


Ega23   (2004-08-30 11:36:00) [20]

Сначала надо вручную освободить:
for i:= 0 to List.Count-1 do Dispose(TMyType(List.Items[i]);


Страницы:   1 2

Наверх

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