![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Освобождение памяти
Просто прохожий © (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