Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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. Некрасиво :((
ЗЫ Просто параллельно много программлю на Джаве, потому такого кода и понакатал.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.10;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.035 c
7-28549           DenKost               2001-09-27 20:45  2002.01.10  
Clock and Date


1-28483           SL                    2001-12-22 14:17  2002.01.10  
Можно ли в ComboBox ширину выпадающего окна сделать больше ширины окна редактирования


1-28466           GorA                  2001-12-21 15:18  2002.01.10  
T(Rx)RichEdit


4-28554           Игорь2                2001-11-08 23:47  2002.01.10  
кодировка


1-28458           Aleksandr             2001-12-21 14:33  2002.01.10  
Как корректно уничтожить из дестрактора компоненты ScrollBar