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

Вниз

Освобождаются ли ресурсы ?   Найти похожие ветки 

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

Наверх





Память: 0.45 MB
Время: 0.005 c
1-17865
Vygantas
2002-05-24 21:44
2002.06.06
Kak lovit to chto poslano v printer ???


1-17896
ded_di
2002-05-27 13:03
2002.06.06
фон у грида


1-17932
Sniffer
2002-05-26 17:31
2002.06.06
Давайте обсудим


14-18140
IGOREK
2002-04-28 05:49
2002.06.06
А мне не нравятся правила бойцовского клуба!!!


1-17927
AVeR
2002-05-24 20:19
2002.06.06
Получить полный путь, откуда запустили мою программу.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский