Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Уничтожение объекта

Основные положения объектно-ориентированного программирования | Принципы ООП | Элементы классов | Области видимости | Типы методов | Переопределение методов | Перегрузка методов | Свойства | От структурированного программирования к ООП | Основные задачи структурного программирования |


Читайте также:
  1. I. Функциональные характеристики объекта закупки
  2. III. Особенности предмета и объекта музыкальной педагогики.
  3. IV. ВОЗМОЖНЫЕ АВАРИИ НА ОБЪЕКТАХ ЗАВОДА
  4. VII. Внесение в Реестр сведений об объектах незавершенного строительства
  5. VIII. Организация и порядок проведения учебных тренировок на охраняемых объектах
  6. Аварии на пожаро- и взрывоопасных объектах (ПВОО)
  7. Адрес объекта Дата

По окончании использования экземпляра объекта следует освободить вы­деленную для него память с помощью метода 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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Объявление и создание объекта| События. Взаимодействие объектов.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)