Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос о существовании сборщика мусора


Starkom ©   (2001-12-17 12:30:00) 

Вопрос такой: Существует метод getLaLaLaList, допустим, возращающий TStringList. Это, впрочем, неважно. В теле метода пишем result:=TStringList.Create(); Затем используем этот метод в чем-то наподобие типа aaaList.assign(getLaLaLaList), что, впрочем тоже неважно, главное что данные копируются в aaaList и объект, созданный как result в getLaLaLaList уже не нужен и не используется никак и на него даже нет пойнтера, а память то под него выделена.
Очищает ли в таких случаях сборщик мусора выделенную память? И, вообще, существует ли этот сборщик мусора в Delphi 5?
А если нет, то как в таких случаях освобождать память?


Starkom   (2001-12-22 13:42:00) [1]

хмм, а если, допустим, вызываешь что-то типа
if getCurrentForm().getVisibleComponents().getAnythingOfComp().isPresent()
then doAnything;
with вложенности 3 получается. По-моему, очень некрасиво.
Хотя, уже все исправил на что-то типа tempList:=getLaLaLaList. Получилась жуть какая-то. В методах куча переменных tempList, tempStringList, tempComponentList, и везде строчки содержащие Free. Некрасиво :((
ЗЫ Просто параллельно много программлю на Джаве, потому такого кода и понакатал.


Alex_Sudakov   (2001-12-18 16:03:00) [2]

Можно еще проще:

aaaList:=Getlalalist;
...
aaaList.Free;


Digitman   (2001-12-18 14:56:00) [3]

Ты для чего, спрашивается, возвращаешь объект класса TStringList ? Чтобы с результатом что-то сделать ? Так и делай на здоровье ! Можешь и ссылку не фиксировать при этом, например :


with getLaLaLaList() do begin
... поработал с ним
Free; // здесь же сразу и освободил память, коль он более не нужен
end;

ну и в чем здесь "геморрой"-то ?


Starkom   (2001-12-18 14:19:00) [4]

А при выходе из программы, вся память освобождается?


paul_shmakov   (2001-12-17 16:08:00) [5]

2 ShaggyDoc:
автоматическая сборка мусора в delphi есть, если рвботать с созданными объектами через указатель на интерфейс.
но в данном случае это все равно не подходит.


ShaggyDoc   (2001-12-17 13:47:00) [6]

Автоматическая сборка мусора предусмотрена Microsoft в .NET

В Delphi Этого НЕТ. Создавемые объекты надо мочить самому.


Starkom   (2001-12-17 13:14:00) [7]

А, вроде же, есть какой-то сборщик мусора? Или это у меня глюк?
2 gek: С точки зрения удобочитаемости кода - это, на мой взгляд, самый лучший вариант использования методов типа getAnything().


gek   (2001-12-17 13:06:00) [8]

Если у тебя есть х:=TStringList.Create();
то должно быть и х.free;
а зачем результат присваивать как ты делаешь мне непонятно


Юрий Федоров   (2001-12-17 13:05:00) [9]

Других вариантов нет. Разве только With, но читабельности он, на мой взгляд, не прибавляет.


Starkom   (2001-12-17 12:39:00) [10]

Так а как в данном случае получить указатель на объект, созданный как result в getLaLaLaList()? То есть надо присваивать какому-то пойнтеру
temp:=getLaLaLaList(), а потом вызывать temp.Free? Это же геморрой, если у тебя множественные вложенные вызовы методов, возвращающих указатели на созданные в теле метода объекты. Да и с точки зрения читабельности кода неудобно.


gek   (2001-12-17 12:32:00) [11]

Всю память надо освобождать самому


Наверх

Титульная страница Поиск, карта сайта Написать письмо