Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.025 c
14-1093502826
Holy
2004-08-26 10:47
2004.09.12
Страховая пенсия


4-1091003394
Grumbler
2004-07-28 12:29
2004.09.12
не работает PlaySound... Помогите!!!


1-1093770102
Луарвик
2004-08-29 13:01
2004.09.12
StringGrid: удаление строки


1-1093505122
O?O
2004-08-26 11:25
2004.09.12
Инсталятор


1-1093509575
EXCEL
2004-08-26 12:39
2004.09.12
Вопрос по TExcelApplication .




   Наверх