ВУЗ:
Составители:
Рубрика:
18
Приведем пример:
destructor TBook.Destroy;
begin
FAuthor.Destroy;
FTitle.Destroy;
inherited Destroy;
end;
Для вызова наследуемого деструктора необходимо использовать ключевое слово inherited
и после него имя деструктора. Как правило, подходящий наследуемый деструктор надо вызывать
в последнем исполняемом операторе блока begin-end деструктора.
Вместо использования ключевого слова inherited можно вызвать наследуемый деструктор,
указав его полное имя (то есть название класса-предшественника, точку и название наследуемого
деструктора).
Только в очень редких случаях деструктору бывают нужны параметры. Параметр,
передаваемый деструктору, подразумевает, что требуется сделать нечто большее, нежели
простое уничтожение экземпляра объекта, и что помимо уничтожения будет проделана
некоторая дополнительная обработка, которой требуется этот параметр.
1.5.8 Необходимость использования деструктора
Простое правило хорошего тона таково: если вы создали конструктор для класса, то
скорее всего вам в этом классе потребуется и деструктор. В частности, если конструктор
резервирует какие-то ресурсы или в процессе работы создает другие экземпляры объектов, то
обычно деструктор должен освободить ресурсы и уничтожить созданные экземпляры.
Исключение из этого правила встречается внутри компонентов, когда создается другой,
подчиненный, компонент и указывается, что текущий экземпляр объекта является его
владельцем. Подчиненный компонент, созданный таким образом, при необходимости
уничтожается автоматически.
Другое исключение из правила, согласно которому при наличии конструктора нужно
определять и деструктор - ситуация, когда у класса нет никаких косвенных полей данных.
Разница между встроенным (прямым) и ссылочным (косвенным) полем заключается в
том, что встроенные поля непосредственно содержат значения атрибута данных, в то время как
ссылочные поля содержат ссылку на какой-нибудь другой объект. Значения встроенным полям
присваиваются непосредственно. Значения ссылочных полей должны присваиваться
посредством доступа к экземпляру объекта, на который указывает ссылка.
В случае, когда объект не создает и не включает в себя никаких подчиненных объектов,
деструктор может оказаться ненужным. В такой ситуации, даже если в определении класса были
добавлены новые поля, класс не отвечает за их уничтожение, так что о них можно не заботиться.
1.5.9 Реализация классовых методов
При реализации классового метода надо придерживаться тех же правил, что и для
обычных методов, за исключением того, что заголовок реализации должен начинаться с
зарезервированного слова class.
Надо помнить, что внутри классового метода нет доступа к полям объекта даже в том
случае, когда для вызова этого метода используется действительный представитель класса.
Страницы
- « первая
- ‹ предыдущая
- …
- 16
- 17
- 18
- 19
- 20
- …
- следующая ›
- последняя »