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

Вниз

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

 
Андре_   (2002-04-01 09:49) [0]

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

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


 
panov ©   (2002-04-01 09:57) [1]

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


 
oomneeq ©   (2002-04-01 20:41) [2]

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

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


 
Suntechnic ©   (2002-04-02 06:36) [3]

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


 
Slava ©   (2002-04-02 07:53) [4]

> Suntechnic ©

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

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

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


 
Suntechnic ©   (2002-04-02 08:01) [5]

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


 
MBo ©   (2002-04-02 08:41) [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, нетрудно следить за корректным освобождением объектов, а с интерфейсными ссылками, насколько я понимаю, есть опасность, что объект может быть нежелательно уничтожен вследствие программных просчетов- так что панацеи нет :(



 
Slava ©   (2002-04-02 08:48) [7]

> 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)


 
Slava ©   (2002-04-02 08:57) [8]

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


Именно это.


 
Suntechnic ©   (2002-04-02 09:11) [9]

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


 
oomneeq ©   (2002-04-02 11:23) [10]

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

2 Suntechnic

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


 
Fantasist   (2002-04-04 21:43) [11]

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

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



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

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

Наверх




Память: 0.5 MB
Время: 0.012 c
1-57775
VS2001
2002-04-01 15:59
2002.04.18
Распаковка архива из памяти (TMemoryStream)


1-57737
elf7
2002-04-05 10:25
2002.04.18
Директории TreeView


1-57772
Dmitry Klykoff
2002-04-05 10:21
2002.04.18
Кодирование .exe


1-57711
[MC]NuClon
2002-04-06 14:48
2002.04.18
SMTP


3-57637
Oleon
2002-03-28 12:05
2002.04.18
Добрый день. Вопрос по базе InterBase.