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 можно увидеть вызов конструктора формы в виде строки:

Наши рекомендации