Методы в Object Pascal. Семенов Н.М. - 17 стр.

UptoLike

Составители: 

17
Если класс не добавляет к полям предшественника никаких новых полей данных, то
необходимость в определении нового конструктора может и не возникнуть.
1.5.6 Реализация деструкторов
Деструкторы - еще одна группа специальных методов. Их задачи прямо противоположны
задачам конструкторов.
Деструктор уничтожает экземпляр объекта, который использован при его вызове,
автоматически освобождая любую динамическую память, которая была ранее зарезервирована в
конструкторе. Деструктор вызывается тогда, когда работа с данным представителем класса
закончена. Пользователь также должен обеспечить вызов деструкторов для всех экземпляров
объектов, которые содержит в себе уничтожаемый экземпляр.
Другими словами, если пользователь зарезервировал в конструкторе подчиненный
экземпляр объекта, то пользователь же отвечает за то, чтобы при вызове деструктора верхнего
уровня были также уничтожены и все экземпляры объектов, содержащиеся в экземпляре
верхнего уровня.
Общий синтаксис реализации деструктора следующий:
destructor ИмяКласса.ИмяДеструктора (<Параметры>);
<Необязательный блок объявлений>
begin
<Исполняемые операторы>
end;
Рассмотрим пример:
destructor TBook.Destroy;
begin
FTitle:=‘ ‘.
inherited Destroy;
end;
Реализация деструктора также должна располагаться в разделе implementation модуля,
либо в программе или библиотеке, до основного блока begin-end.
После того, как деструктор заканчивает работу, экземпляр, через который он был вызван,
перестает существовать. Попытка использовать этот экземпляр приведет к ошибке.
1.5.7 Наследование деструкторов
Аналогично конструкторам можно использовать код уже существующих в иерархии
наследования деструкторов. Сеть наследования позволяет уничтожать только те поля, которые
класс добавил к полям, унаследованным от классов-предшественников. Всю работу, связанную с
очисткой наследуемых полей, новый класс передает наследуемым деструкторам.
Типичная структура деструктора:
destructor Класс.ИмяДеструктора (<Параметры>);
<Блок локальных объявлений>
begin
<Уничтожение собственных полей>
inherited ИмяДеструктора (<Параметры>);
end;