Student.Done;

Метод Done повинен інкапсулювати всі деталі очистки свого об’єкту, а також всіх структур даних і вкладених об’єктів. Для позначення таких методів звичайно рекомендується використовувати ідентифікатор Done.

Часто корисно і допустимо визначати кілька методів очищення для даного типу об’єкту. Залежно від їх розміщення чи використання, чи залежно від стану і режиму на момент очищення складні об’єкти можуть вимагати очищення різними способами.

Pascal надає розробникам спеціальний тип методу, який називається деструктором, для очищення і видалення динамічних об’єктів. Деструктор об’єднує етап видалення об’єкту з іншими діями чи задачами, необхідними для даного типу об’єкту. Для одного типу об’єкту можна визначити кілька деструкторів.

Type

TStudent=object

Name:String[30];

Date:string[10];

rate:real;

constructor init(nm,Dt:String;rt:real);

Destructor done; virtual;

function GetName:string; virtual;

function getdate:string;

function getrate:real;

Procedure showname;

Procedure showdate;

Procedure showrate;

End;

Деструктори можна успадковувати і вони можуть бути статичними чи віртуальними. Оскільки різні програми завершення об’єктів звичайно вимагають різних типів об’єктів, рекомендується завжди визначати деструктори віртуальними, щоб для кожного типу об’єктів виконувався правильний деструктор.

Нема необхідності вказувати зарезервоване слово DESTRUCTOR для кожного методу очистки, навіть якщо визначення типу об’єкту містить віртуальні методи. Насправді деструктори працюють лише з динамічними об’єктами. При очистці таких об’єктів деструктор виконує деякі спеціальні функції, гарантуючи, що в динамічній пам’яті буде вивільнятися правильне число байт. Але використання деструктора до статичних об’єктів теж не є помилкою і не призводить до некоректної роботи програми.

Основною перевагою використання деструктора є видалення з пам’яті поліморфних об’єктів, тобто тих, які були присвоєні екземпляру батьківського типу завдяки правилам сумісності. Будуючи код поліморфного об’єкта, компілятор під час компіляції точно не знає, який тип об’єкту насправді буде використаний. Єдине, що йому відомо – це ієрархія потомків предка певного типу, до якої цей об’єкт належить.

Очевидно, що розміри типів об’єктів відрізняються. Інформація про розмір об’єкта, який видаляється, стає доступною для деструктора в момент видалення завдяки вертанню до таблиці віртуальних методів екземплярів об’єктів певного типу VMT.

Для виконання звільнення пам’яті при пізньому зв’язуванні деструктор потрібно викликати як частину розширеного синтаксису процедури Dispose








Дата добавления: 2015-08-26; просмотров: 557;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.