Читайте также:
|
|
По окончании использования экземпляра объекта следует освободить выделенную для него память с помощью метода Free. Этот метод сначала проверяет, не равен ли экземпляр объекта значению Nil, и затем вызывает деструктор (destructor) объекта – метод Destroy.
Понятно, что действие деструктора обратно действию конструктора, т.е. он освобождает всю выделенную память и выполняет другие действия по освобождению захваченных конструктором объекта ресурсов. Синтаксис вызова метода Free прост.
FooObject.Free;
Обратите внимание, что, в отличие от вызова конструктора, вызов деструктора выполняется с помощью ссылки на экземпляр, а не на тип.
Кроме этого, запомните еще один совет: никогда не используйте непосредственный вызов метода Destroy. Более безопасно и корректно вызвать метод Free.
В Object Pascal все экземпляры объекта – динамические, и программист должен удалять их сам. Необходимо уничтожать и все, что было создано в программе. Исключением из этого правила являются объекты, принадлежащие другим объектам. Этот тип объектов уничтожается автоматически. Еще одним исключением являются объекты с управляемым временем жизни, имеющие собственный счетчик ссылок (например, производные от классов TInterfacedObject или TComObject), которые автоматически удаляются после ликвидации последней ссылки на них.
Также необходимо понимать, что нет необходимости всегда объявлять и описывать конструкторы и деструкторы. Ведь все классы языка Object Pascal неявно наследуют функциональные возможности базового класса TObject, причем, независимо от того, указано ли это наследование явно или нет. Например, следующее объявление:
type TFoo = class;
полностью эквивалентно объявлению класса:
type TFoo = class(TObject);
Чтобы правильно инициализировать в создаваемом объекте поля, относящиеся к классу-предку, нужно сразу же при входе в конструктор вызвать конструктор предка при помощи зарезервированного слова inherited:
constructor TMyObject.Create;
begin
inherited Create;
...
end;
Во многих примерах, поставляемых вместе с Delphi, вы почти не увидите там вызовов конструкторов и деструкторов. Дело в том, что любой компонент, попавший при визуальном проектировании в ваше приложение из Палитры компонентов, включается в определенную иерархию. Иерархия эта замыкается на форме (класс TForm): для всех ее составных частей конструкторы и деструкторы вызываются автоматически, незримо для программиста. Кто создает и уничтожает формы? Это делает приложение (глобальный объект с именем Application).
В файле проекта (с расширением dpr) вы можете увидеть вызовы метода Application.CreateForm, предназначенного для этой цели.
Что же касается объектов, создаваемых динамически (во время выполнения приложения), то здесь нужен явный вызов конструктора и метода Free.
Дата добавления: 2015-07-25; просмотров: 55 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Объявление и создание объекта | | | События. Взаимодействие объектов. |