Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

TList, освобождение   Найти похожие ветки 

 
digger ©   (2004-08-30 11:34) [0]

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

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

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


 
MU ©   (2004-08-30 11:35) [1]

необходимо освобождать вручную


 
begin...end ©   (2004-08-30 11:36) [2]

Не освободит. Вручную.


 
Ega23 ©   (2004-08-30 11:36) [3]

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


 
begin...end ©   (2004-08-30 11:38) [4]

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

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

?


 
VMcL ©   (2004-08-30 11:40) [5]

>>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;


 
Ega23 ©   (2004-08-30 11:45) [6]

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

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


 
VMcL ©   (2004-08-30 11:49) [7]

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

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


 
Ega23 ©   (2004-08-30 11:52) [8]

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

Опечатка...


 
DesWind ©   (2004-08-30 12:03) [9]

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


 
begin...end ©   (2004-08-30 12:06) [10]

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

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


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

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


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

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


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


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

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

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


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


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


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


 
pasha_golub ©   (2004-08-30 12:33) [15]

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

:0)


 
begin...end ©   (2004-08-30 12:34) [16]

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

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


 
DesWind ©   (2004-08-30 12:36) [17]

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


 
DesWind ©   (2004-08-30 12:37) [18]

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


 
VMcL ©   (2004-08-30 12:42) [19]

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

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


 
DesWind ©   (2004-08-30 12:48) [20]

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

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

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


 
DesWind ©   (2004-08-30 12:50) [21]

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
3-1092596419
3APA3A
2004-08-15 23:00
2004.09.12
Блокировка записей в FireBird 1.5


14-1093355242
saNat
2004-08-24 17:47
2004.09.12
DOS и Windows


3-1092635311
Shap
2004-08-16 09:48
2004.09.12
DBGrid + DBNavigator


6-1089289830
s_ser
2004-07-08 16:30
2004.09.12
Выполнение команд в консоли (для Linuxa)


8-1087961266
ИМХО
2004-06-23 07:27
2004.09.12
Разбить картинку на 2 картинки