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

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

Сборщик мусора [D6]


Андре_ ©   (2002-04-01 09:49:00) 

Есть ли в Delphi механизм, аналогичный сборщику мусора в Java ?
Извините, за столь наивный вопрос :-)

То есть, при выходе переменной типа объект(или его наследников) из области видимости этой самой переменной освобождается ли автоматически память отведенная под этот объект ?


Fantasist   (2002-04-04 21:43:00) [1]

Кстати говоря есть как минимум два динамических объекта, которые делфи освобождает сам. Это строки и динамические массивы - для них организованна сборка мусора почти совсем как в Java.

А с интерфейсами - это, конечно, своеобразная сборка мусора. Она организуется на половину компилятором, на половину программно. Программно, так как все что делается - это вызывается _Release объекта, компилятором, така как он сам вызывает Release при обнулении переменной типа интерфейс, или при ее уничтожении. Надо сказать такой механизм не сказать чтобы меня очень радовал.


oomneeq   (2002-04-02 11:23:00) [2]

2 Slava, MBo
10x за разъясненья моей смутно выраженной мысли.

2 Suntechnic

>"Горе от ума"...
А кто горевал - то ? :-)
Обсуждаем усё - и прямое и косвенноё !


Suntechnic   (2002-04-02 09:11:00) [3]

"Горе от ума"... Нет оно конечно можно и так, если подключить воображение, но к поставленному вопросу по-моему имеет только косвенное отношение. Хотя каждый сходит с ума по-своему. С++ в этом плане гораздо красивее с auto_ptr классом.


Slava   (2002-04-02 08:57:00) [4]

> MBo © (02.04.02 08:41)
Думаю, товарищи имели в виду следующее


Именно это.


Slava   (2002-04-02 08:48:00) [5]

> Suntechnic ©

TInterfacedObject implements the IInterface (IUnknown) interface and can be used as a base for simple COM-compatible classes that benefit from having the IInterface methods implemented.
...
TInterfacedObject serves as a convenient base class for classes that implement interfaces because it implements the methods of IInterface. TInterfaceObject descendants use the IInterface reference-counting methods to handle lifetime management. That is, when the reference count on a TInterfaceObject descendant drops to zero, the object is automatically freed.

(c) Delphi Help ;o)


MBo   (2002-04-02 08:41:00) [6]

Думаю, товарищи имели в виду следующее - при желании иметь автоматическую сборку мусора можно перестроить программу (обычно проще все с нуля написать ;) ) с использованием не ОБЪЕКТНЫХ ссылок, а ИНТЕРФЕЙСНЫХ.
При этом обеспечивается освобождение объекта, созданного по такой ссылке при уменьшении счетчика использований до 0 или выходе из зоны видимости.
пример
TIntObject=class(TSomeObject,ISomeInterface)
...объявление и реализация методов интерфейса

procedure TForm1.Button1Click(Sender: TObject);
var
Inter: ISomeInterface;
Obj:TIntObject;
begin
Obj:=TIntObject.Create;
Inter := TIntObject.Create;
....

end;
после выхода из процедуры Obj останется неосвобожденным, висячим,
а Inter освободится

Конечно, такой переход требует коренной перестройки всей программной концепции и применим лишь в некоторых случаях.
При аккуратном программировании, IMHO, нетрудно следить за корректным освобождением объектов, а с интерфейсными ссылками, насколько я понимаю, есть опасность, что объект может быть нежелательно уничтожен вследствие программных просчетов- так что панацеи нет :(


Suntechnic   (2002-04-02 08:01:00) [7]

>Slava © (02.04.02 07:53)
"То ли лыжи не едут, то ли я....". Объясни мне причём тут интерфейсы(понятие во всех аспектах абстрактное) и я пойду повешусь....


Slava   (2002-04-02 07:53:00) [8]

> Suntechnic ©

Вопрос:"То есть, при выходе переменной типа объект(или его наследников) из области видимости этой самой переменной освобождается ли автоматически память отведенная под этот объект ?"

Ответ:"При использовании интерфейсов все выглядит именно так.
Но для этого нужно переключать свои мозги с объектной модели на интерфейсную.
Интерфейсы хоть и заточены под COM, но их можно и так использовать, например, тем кто не любит за собой мусор убирать :)"

Вот при том и интерфейсы


Suntechnic   (2002-04-02 06:36:00) [9]

>oomneeq © (01.04.02 20:41)
Уважаемый, причём тут интерфейсы? Был конкретный вопрос, был конкретный ответ.


oomneeq   (2002-04-01 20:41:00) [10]

>То есть, при выходе переменной типа объект(или его наследников)
>из области видимости этой самой переменной освобождается ли >автоматически память отведенная под этот объект ?

При использовании интерфейсов все выглядит именно так.
Но для этого нужно переключать свои мозги с объектной модели на интерфейсную.
Интерфейсы хоть и заточены под COM, но их можно и так использовать, например, тем кто не любит за собой мусор убирать :)


panov   (2002-04-01 09:57:00) [11]

Сборщика нет.
Память под динамически созданные объекты нужно освобождать самому.


Наверх

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