Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Объект, естественно, занимает место в памяти, которая необходима для хранения как свойств объекта, так и дополнительной информации, например, таблицы виртуальных методов. Для разрушения объекта и освобождения памяти, которая выделена для него в конструкторе, предназначен деструктор — специализированный метод, изначально определенный в классе 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!