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