Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
1-57699
Malder
2002-04-04 21:27
2002.04.18
Как управлять цветами в Паскале ?


3-57619
mik
2002-03-27 12:44
2002.04.18
Еще вопросик по SQL.


1-57678
SPeller
2002-04-04 09:42
2002.04.18
Как сделать, чтобы окно отображалось в таскбаре ??


1-57680
vrRaven
2002-03-30 16:40
2002.04.18
Переводчик


14-57876
Olgerd
2002-03-11 21:07
2002.04.18
HELP!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский