Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Разрушение объекта. Деструктор



Объект, естественно, занимает место в памяти, которая необходима для хранения как свойств объекта, так и дополнительной информации, например, таблицы виртуальных методов. Для разрушения объекта и освобождения памяти, которая выделена для него в конструкторе, предназначен деструктор — специализированный метод, изначально определенный в классе TObject:

Destructor Destroy; virtual;

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

При переопределении деструктора необходимо указывать ключевое слово Override, так как деструктор является виртуальным методом (помечен ключевым словом Virtual в описании класса TObject). Последней командой описательной части деструктора должен быть вызов переопределенного деструктора родительского класса с помощью ключевого слова Inherited:

Inherited Destroy;

Прямой вызов деструктора не применяется для уничтожения экземпляра класса. Для этого предназначен метод Free, также описанный в классе TObject. Данный метод не может быть переопределен, так как не имеет в своем описании ключевого слова Virtual, однако метод Free вызывает деструктор Destroy, поведение которого может быть специфическим (листинг 3.15).

Листинг 3.15. Пример создания и разрушения объекта

Unit Geom4;

Interface

Type

TGeomFigure = class {Заголовок класса TGeomFigure, класс

автоматически является наследником класса TObject}

protected

Color: Integer; {Описание свойства с областью видимости protected),

public

Constructor Create(aColor: Integer);

{Заголовок конструктора (область видимости public) }

Destructor Destroy; override;

{Заголовок деструктора (область видимости public) }

End;

Implementation

Constructor TGeomFigure.Create;

{Заголовок описательной части конструктора}

begin

Inherited Create; {Вызов конструктора родительского класса}

Color:= aColor; {Инициализация свойства, которая не может быть

выполнена в родительском классе, так как свойство

Color описано в классе TGeomFigure}

end;

Destructor TGeomFigure.Destroy; {Заголовок описательной части

деструктора}

begin

Inherited Destroy; {Вызов деструктора родительского класса}

end;

Procedure UsingFigure; {Описание процедуры, использующей объект

класса TGeomFigure}

Var

Figure: TGeomFigure;

begin

Figure:= TGeomFigure.Create(3);

{Создание экземпляра класса TGeomFigure}

Figure.Draw; {Вызов метода Draw}

Figure.Color:= 13; {Изменение значения свойства Color}

Figure.Free; {Разрушение объекта, автоматический вызов деструктора

Destroy}

end;

End.





Дата публикования: 2014-11-02; Прочитано: 493 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...