Л.8. Конструкторы и деструкторы.ppt
- Количество слайдов: 11
Конструкторы и деструкторы
• Особой разновидностью методов являются конструкторы и деструкторы. Создание объекта включает выделение памяти под экземпляр и инициализацию его полей, а разрушение - очистку полей и освобождение памяти. Действия по инициализации и очистке полей специфичны для каждого конкретного класса объектов.
• По этой причине язык Delphi позволяет переопределить стандартный конструктор Create и стандартный деструктор Destroy для выполнения любых полезных действий. Можно даже определить несколько конструкторов и деструкторов (имена им назначает сам программист), чтобы обеспечить различные процедуры создания и разрушения объектов.
Объявление конструкторов и деструкторов похоже на объявление обычных методов с той лишь разницей, что вместо зарезервированных слов function и procedure используются слова constructor и destructor. Пример: type TPeople = class Name: string; Family: string; procedure Get. Name; procedure Get. Family; constructor Create; destructor Destroy; end;
Возможная реализация: Constructor TPeople. Create; begin TPeople. Name : = ' '; TPeople. Family : = ' '; end; Destructor TPeople. Destroy; begin //Пока ничего не делаем end;
Если объект содержит встроенные объекты или другие динамические данные, то конструктор - это как раз то место, где их нужно создавать. Конструктор применяется к классу или к объекту. Конструктор создаёт новый объект только в том случае, если перед его именем указано имя класса. Если указать имя уже существующего объекта, он поведёт себя по-другому: не создаст новый объект, а только выполнит код, содержащийся в теле конструктора.
Если он применяется к классу, People : = TPeople. Create; В динамической памяти выделяется место для нового объекта. Выделенная память заполняется нулями. Затем выполняются заданные программистом действия конструктора. Ссылка на созданный объект возвращается в качестве значения конструктора. Тип возвращаемого значения совпадает с типом класса, использованного при вызове (в нашем примере это тип TPeople).
Таким образом, конструктор - это функция, возвращающая созданный и инициализированный объект.
Если конструктор применяется к объекту, People. Create; то конструктор выполняется как обычный метод. Другими словами, новый объект не создаётся, а происходит повторная инициализация полей существующего объекта.
Деструктор уничтожает объект к которому применяется: People. Destroy; В результате выполняются: Заданный программистом код завершения. Освобождается занимаемая объектом динамическая память. В теле деструктора обычно должны уничтожаться встроенные объекты и динамические данные, как правило, созданные конструктором.
• Вызов деструктора для несуществующих объектов недопустим и при выполнении программы приведёт к ошибке. Чтобы избавить программистов от лишних ошибок, в объекты ввели предоставленный метод Free, который следует вызвать вместо деструктора. Метод Free сам вызывает деструктор Destroy, но только в том случае, если значение объектной переменной не равно nil.
Л.8. Конструкторы и деструкторы.ppt