Форум: "Основная";
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];
ВнизВопрос о существовании сборщика мусора Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c