Примечание
Конструктор создает новый объект только в
том случае, если перед его именем указано имя класса. Если указать имя уже
существующего объекта, он поведет себя по-другому: не создаст новый объект,
а только выполнит код, содержащийся в теле конструктора.
Чтобы правильно инициализировать в создаваемом объекте поля, относящиеся к классу-предку, нужно сразу же при входе в конструктор вызвать конструктор предка при помощи зарезервированного слова
inherited:
constructor TMyObject.Create;
begin
inherited Create;
...
end;
Взяв любой из примеров, прилагаемых к этой книге или поставляемых вместе в Delphi, вы почти не увидите там вызовов конструкторов и деструкторов. Дело в том, что любой компонент, попавший при визуальном проектировании в ваше приложение из Палитры компонентов, включается в определенную иерархию. Иерархия эта замыкается на форме (класс
TForm): для всех ее составных частей конструкторы и деструкторы вызываются автоматически, незримо для программиста. Кто создает и уничтожает формы? Это делает приложение (глобальный объект с именем
Application). В файле проекта (с расширением dpr) вы можете увидеть вызовы метода
Application.CreateForm, предназначенного для этой цели.
Что же касается объектов, создаваемых динамически (во время выполнения приложения), то здесь нужен явный вызов конструктора и метода
Free.
|