Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.046 c
3-1092363763
rus_lan
2004-08-13 06:22
2004.09.12
ошибка BDE


3-1092731625
Lizka
2004-08-17 12:33
2004.09.12
как добавить строку из одного DBLookupListBox в другой?


3-1092716386
leonidus
2004-08-17 08:19
2004.09.12
Не полное отображение содержимого таблицы


3-1092555810
tERRORist
2004-08-15 11:43
2004.09.12
UNIQUEIDENTIFIER (IsRow GUID) vs NUMERIC(38,0) (IDENTITY)


3-1092521194
Fantasy
2004-08-15 02:06
2004.09.12
DATA





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский