Как создаются и уничтожаются объекты?
Те, кто раньше использовал ООП в работе на C++ и особенно в Turbo Pascal, будьте внимательны: в Object Pascal экземпляры объектов могут быть только динамическими. Это означает, что в приведенном выше фрагменте переменная
AMyObject на самом деле является указателем, содержащим адрес объекта.
Объект "появляется на свет" в результате вызова специального метода, который инициализирует объект — конструктора.
Созданный экземпляр уничтожается другим методом — деструктором:
AMyObject := TMyObject.Create;
{ действия с созданным объектом }
...
AMyObject.Destroy;
Но, скажет внимательный читатель, ведь объекта еще нет, как мы можем вызывать его методы? Справедливое замечание. Однако обратите внимание, что вызывается метод
TMyObject.Create, а не AMyObject.Create. Есть такие методы (в том числе конструктор), которые успешно работают до (или даже без)
создания объекта. О подобных методах, называемых методами класса,
пойдет речь чуть ниже.
В Object Pascal конструкторов у класса может быть несколько. Общепринято называть конструктор
create (в отличие от Turbo Pascal, где конструктор обычно назывался init, и от C++, где его имя совпадает с именем класса). Типичное название деструктора —
Destroy.
type
TMyObject = class(TObject)
MyField: Integer;
Constructor Create;
Destructor Destroy;
Function MyMethod: Integer;
end;
Для уничтожения экземпляра объекта рекомендуется использовать метод
Free, который первоначально проверяет указатель (не равен ли он Nil) и только затем вызывает
Destroy:
AMyObj ect.Free ;
До передачи управления телу конструктора происходит собственно создание объекта — под него отводится память, значения всех полей обнуляются. Далее выполняется код конструктора, написанный программистом для инициализации экземпляров данного класса. Таким образом, хотя на первый взгляд синтаксис конструктора схож с вызовом процедуры (не определено возвращаемое значение), но на самом деле конструктор — - это функция, возвращающая созданный и инициализированный объект.
|