Создание и уничтожение объектов. Конструкторы и деструкторы.

В Object Pascal объекты могут быть только динамическими! Любая переменная объектного типа — это указатель, но доступ к объекту идет без 'шляпки', а создание нового объекта осуществляется не оператором New, а с помощью вызова конструктора — функции, возвращающей указатель на создаваемый объект. Соответственно, уничтожение объекта производится не с помощью Dispose, а вызовом деструктора. Поэтому обычно в Delphi конструктор называют Create ("создать"), а деструктор — Destroy ("уничтожить, разрушить"):

aMyObject:=tMyObject.Create; {создали объект aMyObject типа tMyObject

и запомнили указатель на него}

...

aMyObject.Destroy; {уничтожили объект}

Заметим, что конструктор — это метод класса, и он работает без экземпляра объекта (экземпляра еще нет, но метод создает его). В Delphi конструкторы могут быть виртуальными, и их может быть несколько. Сразу при входе в конструктор желательно проинициализировать прародителя:

constructor tMyObject.Create;

begin

inherited Create;

...

end;

В данном примере инициализация прародителя осуществляется с помощью специального ключевого слова inherited, которое появилось еще в TurboPascal 7.0. Оно означает, что следующий за ним вызов относится к непосредственному прародителю данного объекта. Многократные вызовы типа inherited inherited запрещены, чтобы не вызвать неправильной инициализации объекта.

Если наш класс описан как

tMyObject=class(tObj1)

...

end;

то вызов inherited Create абсолютно логичен вызову tObj1.Create.