Конструкторы и деструкторы.
Конструктор выделяет память для объекта, а деструктор осуществляет очистку полей и освобождение памяти. Действия по инициализации и очистке полей специфичны для каждого конкретного класса объектов. По этой причине язык Delphi позволяет переопределить стандартный конструктор Create и стандартный деструктор Destroy для выполнения любых полезных действий. Можно даже определить несколько конструкторов и деструкторов (имена им назначает сам программист), чтобы обеспечить различные процедуры создания и разрушения объектов.
Объявление конструкторов и деструкторов похоже на объявление обычных методов с той лишь разницей, что вместо зарезервированных слов function и procedure используются слова constructor и destructor.
type
TDelimitedReader = class
// Конструкторы и деструкторы
constructor Create(const FileName: string; const ADelimiter: Char = ';');
destructor Destroy; override;
...
end;
Конструктор применяется к классу или к объекту. Если он применяется к классу,
Reader := TDelimitedReader.Create('MyData.del', ';');
то выполняется следующая последовательность действий:
в динамической памяти выделяется место для нового объекта;
выделенная память заполняется нулями. В результате все числовые поля и поля порядкового типа приобретают нулевые значения, строковые поля становятся пустыми, а поля, содержащие указатели и объекты получают значение nil;
затем выполняются заданные программистом действия конструктора;
ссылка на созданный объект возвращается в качестве значения конструктора. Тип возвращаемого значения совпадает с типом класса, использованного при вызове (в нашем примере это тип TDelimitedReader).
Если конструктор применяется к объекту,
Reader.Create('MyData.del', ';');
то конструктор выполняется как обычный метод. Другими словами, новый объект не создается, а происходит повторная инициализация полей существующего объекта. В этом случае конструктор не возвращает никакого значения. Далеко не все объекты корректно себя ведут при повторной инициализации, поскольку программисты редко закладывают такую возможность в свои классы. Поэтому на практике повторная инициализация применяется крайне редко.
Деструктор уничтожает объект, к которому применяется:
Reader.Destroy;
В результате выполняется заданный программистом код завершения;
освобождается занимаемая объектом динамическая память.
В теле деструктора обычно должны уничтожаться встроенные объекты и динамические данные, как правило, созданные конструктором.
Как и обычные методы, деструктор может иметь параметры, но эта возможность используется редко.
-
Содержание
- Принципы объектно-ориентированного программирования.
- Структура класса.
- Свойства.
- Статические и виртуальные методы.
- Перезагружаемые методы.
- Конструкторы и деструкторы.
- Интегрированная среда разработки Delphi.
- Визуальные средства разработки.
- Программирование с управлением по событиям.
- Абстрактный метод.
- Методы класса.
- Исключительные ситуации.
- Атрибуты доступа в Delphi.
- Обработка исключительных ситуаций.
- Библиотека визуальных компонентов в Delphi (vcl).
- Ссылки на классы.
- Указатели на методы.
- Фреймы и шаблоны компонентов.
- Delphi 2009: отличия от предыдущих версий.
- Классы и модули.
- Модули и программы.
- Информация о типе во время выполнения.
- Полиморфизм и виртуальные методы.