Главная страница
    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.006 c
1-18006
radisheva
2002-05-24 10:30
2002.06.06
Типы данных


1-17962
Telepuzik
2002-05-28 12:56
2002.06.06
Конвертирование типов данных


1-17886
alxx
2002-05-17 10:43
2002.06.06
Можно ли програмно заставить SpeedButton вспучиться?


6-18076
xmag
2002-03-25 23:19
2002.06.06
Передаю url на сервер и полуаю ....


1-17977
Дельфятник
2002-05-28 13:00
2002.06.06
OnMouseMove по ScrollBar y ListBox a.





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