Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.01 c
1-18061
ЗГ
2002-05-24 08:17
2002.06.06
Не подскажите как сделать так, чтобы запущенная прога, скопировал


3-17800
thedigit
2002-05-16 00:06
2002.06.06
Срочно, plz...Проблема с импортом из Excel.


8-18072
дикое Кенгуру
2002-01-20 08:19
2002.06.06
Можно пример, как использовать Direct Sound в Дельфи ? Загрузить, прослушать, поменять параметры.


14-18145
cyborg
2002-05-03 18:02
2002.06.06
Не знаю куда спросить :-)


1-18004
aLexXey
2002-05-24 08:16
2002.06.06
Вопрос к