Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.10;
Скачать: CL | DM;

Вниз

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

 
Starkom   (2001-12-17 12:30) [0]

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


 
gek   (2001-12-17 12:32) [1]

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


 
Starkom   (2001-12-17 12:39) [2]

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


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

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


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

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


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

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


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

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

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


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

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


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

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


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

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


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

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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.01.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.006 c
3-28440
Сержик
2001-12-06 13:06
2002.01.10
Как узнать высоту frMemoView после подстановки в них данных


3-28436
macinsoft
2001-12-10 10:31
2002.01.10
Восстановление базы


1-28469
dimonf
2001-12-20 20:46
2002.01.10
Проблема с окнами MDIChild


1-28467
Гретый
2001-12-21 21:49
2002.01.10
Народ у кого-нибудь есть исходники TSpinEdit?


3-28407
urii
2001-12-06 10:35
2002.01.10
Вопрос по таблице Paradox