Destructor TPictureShow-Destroy;

Begin

FFilm.Destroy; // Для полей-ссылок win FFilm.Free;

FTitle:="; // Для обычных полей

Inherited Destroy; // Можно вызвать и наследуемый TObject.Destroy

End;

Примечания:

Реализация деструктора начинается с указания зарезервированного

слова Destructor, за которым следует полное имя деструктора:

<имя класса>.<имя деструктора>.

• Внутри деструктора есть доступ не только к обычным идентифи­каторам, но и к полям экземпляра класса, инкапсулированным при его опре­делении.

Исполняемые операторы деструктора должны позаботиться обо всех операциях очистки, необходимых для уничтожения экземпляра класса. Код деструктора должен уничтожить все внутренние экземпляры объек­тов и освободить динамическую память, которая была зарезервирована во время существования экземпляра класса. Однако нет необходимости явно устанавливать в нулевые значения поля прямого доступа.

• Следует иметь в виду, что при неудачных попытках создания экземп­ляров класса деструктор, особенно Destroy, используемый по умолчанию, может быть вызван лишь с частично инициализированным экземпляром, по­этому он должен быть подготовлен к работе с полями, которые еще не

инициализированы.

Необходимость в объявлении деструкторов с параметрами возникает очень редко. Обычно все, что нужно сделать деструктору - уничтожить экземпляр класса, и вся необходимая для этого информация и так доступна ему.

Если у класса нет полей косвенного доступа, то деструктор можно не создавать для такого пользовательского класса.

Фактически нет не наследуемых конструкторов и деструкторов.

е) Вызов конструкторов.

Для того чтобы вызвать конструктор, необходимо правильно объявить и определить класс. Объявление класса должно быть доступно, т.е. он должен находится в области видимости из того места, где конструктор будет вызы­ваться.

Если в пользовательском классе не определен конструктор, то по умол­чанию будет использоваться конструктор, унаследованный от класса-потомка. В любом случае у всех объектов есть доступ к конструкторуCreate,определенному в классе TObject.

Определение класса создает активную структуру, способную создавать представителей этого класса. Объекты, которые создаются с помощью опре­деления класса, способны хранить ссылки на вновь создаваемые объекты.

Синтаксис объявления переменной и вызова конструктора следующий:

Var <имя обьекта>: <имя класса>; // Объявление переменной -указателя

Begin

. . .

<имя обьекта>:=<имя класса>.<имя конструктора>[(<параметры>)];

. . .

End;

Var TmpFrm: TForm;

Begin

TmpFrm:=TForm.Create(Self); // Вызов метода с описателем - через точку

End;

Примечание:

Если вызвать конструктор от имени объекта, то новый объект не будет создан (память не выделяется), но будут выполнены операторы, ука­занные в коде конструктора.

Конструктор может также вызываться с помощью переменной ти­па указателя на класс.

ж) Вызов деструкторов

Деструкторы вызываются точно так же, как и большинство других мето­дов класса - через его действующий экземпляр. Синтаксис вызова конструк­тора следующий:

<имя объекта>.<имя деструктора>[(<параметры>)];

Примечания:

После вызова деструктора объект становится недоступен и единст­венная возможная операция, которую можно выполнить - это вызвать конструктор для создания нового экземпляра. Целесообразно присваивать объ­екту значениеNil сразу после его уничтожения, чтобы в дальнейшем можно было бы проверить его существование.

Не следует вызывать деструкторы непосредственно. Вызов метода Free, наследуемого отTObject.Free, сравнивает указатель экземпляра со значением Nil перед тем, как вызвать деструктор Destroy.

з) Вызовы конструкторов и деструкторов компонентов Delphi. Любой компонент, попавший в ваше приложение при визуальном проек­тировании, включается в определенную иерархию объектов, которая замыка­ется на форме (класс TFonn). Поэтому вызов конструкторов и деструкторов всех компонентов формы производится автоматически при инициализации и удалении формы, незримо для программиста. Сами формы создаются и унич­тожаются приложением - глобальным объектом с именем Application. В фай­ле-проекте с расширением *.Dpr можно увидеть вызов конструктора формы в виде строки: