Текущий архив: 2002.06.06;
Скачать: CL | DM;
Вниз
Освобождаются ли ресурсы ? Найти похожие ветки
← →
Fly` (2002-05-27 17:27) [0]КОгда я работаю с TreeView, я Добавляю свои ITEMS и переменные в DATA .
New(Pi);
Pi^:=Table.FieldByName("Field").AsInteger;
S:=Table.FieldByName("stField").AsString;
WNode := tvTypes.Items.AddChildObject(Node,S,Pi);
ВОпрос такой : освободятся ли ресурсы когда я потом сделаю
tvTypes.Items.Clear
или следует в цикле сделать
FreeMem(tvTypes.Items[i].Data)
???
← →
Внук (2002-05-27 18:02) [1]Нет, не освободятся. Хотя бы потому, что Delphi не знает, как их освобождать: Free, FreeMem, Dispose, Release ? А вдруг они еще нужны?
← →
Дмитрий Баранов (2002-05-27 18:28) [2]Во-первых, New с FreeMem мешать - дурной тон (New->Dispose)
Во-вторых, указатель, который ты освобождаешь, надо бы явно приводить к типу данных
Dispose(PInteger(tvTypes.Items[i].Data));
TMyObject(tvTypes.Items[i].Data).Free;
В-третьих, может случиться так, что тот объект, на который указывает Data, может перестать существовать (сборка мусора, или же ты сам явно разрушил объект). В лучшем случае получишь мусор, в худшем - Access violation. Посему надо почитать про функцию assigned и еще - желательно проверять на nil то, что находится по этому адресу.
← →
Fly` (2002-05-27 18:56) [3]Просьба уточнить этот момент :
> В-третьих, может случиться так, что тот объект, на который
> указывает Data, может перестать существовать (сборка мусора,
> или же ты сам явно разрушил объект).
что такое сборка мусора ? Если я выделил программно память под переменную процедурой New , разве её может что-либо удалить без моего ведома ?
← →
NailS (2002-05-28 12:51) [4]Fly` © (27.05.02 18:56)
> Если я выделил программно память под переменную процедурой
> New , разве её может что-либо удалить без моего ведома ?
>
Память надо освободить руками, вызвав Dispose (Delphi Help). Сборка мусора работает только для интерфейсов (если не ошибаюсь, конечно).
← →
Pavlik Morozov (2002-05-28 14:04) [5]В TTreeView есть такое событие хорошее OnDeletion, в которое кроме всего прочего передается нод, который уничножаеться
Вот туды и втыкаешь свое
Dispose(PInteger(tvTypes.Items[i].Data));
← →
Fly` (2002-05-28 14:32) [6]Ок... спасибо всем ! Примного благодарен .
Страницы: 1 вся ветка
Текущий архив: 2002.06.06;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c