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

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

Освобождение памяти


Просто прохожий ©   (2002-08-16 21:57:00) 

TMyClass = class
FCount : Integer;
FItems : array of Integer;
constructor Create (Count : Integer);
.......................................
end;

constructor Create (Count : Integer);
begin
inherited Create;
FCount := Count;
SetLength (FItems, FCount);
end;


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


Юрий Зотов   (2002-08-16 22:58:00) [1]

> Вопрос: при уничтожении объекта этого класса вся память,
> занимаемая им, освободится автоматически,

Да, занимаемая им САМИМ- освободится автоматически. В том числе, освободятся 4 байта, которые занимает УКАЗАТЕЛЬFItems. Но не освободятся ТЕ4*Count байт, которые занимает ТЕЛОмассива. Поскольку ЭТАпамять к САМОМУобъекту никакого отношения не имеет.

Вот и выходит, что деструктор нужен.


Anatoly Podgoretsky   (2002-08-16 22:55:00) [2]

Ну так раз в конструкторе захватываешь ресурсы, то больше негде их освободить


Просто прохожий   (2002-08-16 22:20:00) [3]

Так значит всё-таки надо деструктор дополнительно описывать? Унаследованного недостаточно?


Anatoly Podgoretsky   (2002-08-16 22:11:00) [4]

Достаточно FItems := nil


Наверх

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