|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.03.2009, 13:14 | #1 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Объекты в процедурах
Привет всем!
Наверное мне должно быть стыдно за то, что я не знаю таких элементарных вещей. Код:
Или уничтожается только ссылка b, а сама картинка остаётся? |
04.03.2009, 14:15 | #2 |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
уничтожается только ссылка поэтому лучше писать
Код:
|
05.03.2009, 09:03 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
05.03.2009, 21:23 | #4 | |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
Цитата:
И полагаться на уничтожение при закрытии не стоит - Если локальная переменная в методе (функции) которая используется в циклах и т.д., сколько будет висячих объектов до закрытия программы ? Если конечно разговор не идет о .NET где есть сборщик мусора и объект уничтожается после уничтожения всех ссылок на него ( но не сразу, а когда запустится этот сборщик ). Последний раз редактировалось s.Creator; 05.03.2009 в 21:39. |
|
05.03.2009, 22:08 | #5 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
ИМХО, наиболее правильная последовательность действий при уничтожении обьекта:
Код:
Как вариант можно воспользоваться функцией FreeAndNil(d) - результат тот же. |
05.03.2009, 22:22 | #6 | ||
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
На всякий случай напомню:
Цитата:
Цитата:
|
||
06.03.2009, 00:48 | #7 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
Простыми словами, когда Вы вызываете конструктор (create) для объекта (в том числе и для локальной переменной- это тоже объект), то Вы занимаете какую то память, где хранятся параметры этой лок. переменной.Далее при использовании ее в проге параметры передаются в какой то другой обьект.К примеру в приведенном выше примере в buffer
скачали картинку с файла , в нужный момент перевели картинку с буфера на форму .Если больше буфер не нужен - уничтожили его (Free). Тем самым освободили память.При следующем вызове метода , где используется лок.переменная все повторится - create -> обработка -> free.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
06.03.2009, 17:23 | #8 |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
Немного поправлю:
Gorychev Код:
Простыми словами цитаты Михалыча можно перевести так: Все переменные (поля классов) объявленные как Код:
Строка Код:
Поэтому при выходе из функции (метода, процедуры) уничтожается переменная-ссылка, а выделенная память остается если к объекту не применен метод Free. Поэтому рекомендуют использовать try ... finally для предотвращения утечки памяти Но у TComponent и его наследников есть механизм взаимодействия с владельцем (Owner) который позволяет сообщить владельцу при уничтожении компонента, что он им уже не владеет. А при уничтожении владельца позволяет владельцу уничтожить всех "подчиненных" (только не путайте с Parent) Поэтому Код:
при выходе из метода переменная p будет уничтожаться, но сами панели уничтожатся при уничтожении формы. |
06.03.2009, 17:38 | #9 | ||
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Если почти дословно, то: Цитата:
|
||
07.03.2009, 13:20 | #10 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Воооо понравился вам тема.... ))))
Я ещё часто встречал такие вещи: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
запутался в процедурах | world12_tk | Помощь студентам | 6 | 03.03.2009 18:57 |
одинаковый код в процедурах | jungle | Помощь студентам | 7 | 26.11.2008 22:45 |
MySQL - рекурсия в хранимых процедурах | Банзай | SQL, базы данных | 0 | 12.08.2008 19:04 |
Как правильно использовать переменные в процедурах | nikolai_P | Microsoft Office Excel | 22 | 15.05.2008 13:15 |
Материал о процедурах | Jondeer | Помощь студентам | 18 | 04.12.2007 21:22 |