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

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



Память: 0.46 MB
Время: 0.008 c
1-18053
Angy_Simba
2002-05-23 17:09
2002.06.06
WYSIWYG- редактор HTML... SOS!!!


3-17836
uncle_m16
2002-05-16 19:21
2002.06.06
Generator


1-17978
Stanbab
2002-05-28 11:38
2002.06.06
Форма в пакете


3-17821
Uncle_m16
2002-05-15 22:19
2002.06.06
диалект


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




   Наверх