Конструктори і деструктори відповідають за існування об'єкта в пам'яті, тобто виділяють пам'ять для екземпляра класу, потім і звільняють її.
Конструктор - це спеціальний вид підпрограми, приєднаний до класу. Його на-значення - створювати представників (екземпляри) класу. Він веде себе як функція, яка повертає посилання на новостворений екземпляр класу, тобто на об'єкт. Одночасно виділяється пам'ять для зберігання значень полів екземпляра класу.
Деструкція - це спеціальний різновид підпрограми, приєднаної до класу. Його призначення полягає в знищенні екземпляра класу, тобто об'єкта і звільнення пам'яті, виділеної під екземпляр.
Реалізація конструкторів
У завдання конструктора входить створення екземпляра класу і виконання операторів, що містяться в його тілі. Призначення коду всередині конструктора - форматувати щойно створений екземпляр об'єкта. Синтаксис реалізації конструктора:
Реалізація успадкованих конструкторів.
Реалізація деструкторов
Деструкція знищує екземпляр класу, який був використаний при його виклику, автоматично звільняючи будь-яку динамічну пам'ять, яка раніше була зарезервована конструктором, закриває файли і т.п. операції. Програміст відповідальний за виклик деструкторів для всіх екземплярів класу, якщо були зарезервовані підлеглі об'єкти.
Синтаксис реалізації деструктора:
Реалізація успадкованих деструкторов
Якщо використовувати механізм успадкування деструкторов, то можна спростити завдання знищення примірників класу, таким чином, щоб кожен раз піклуватися лише про знищення тих полів, які були додані в даному класі. Всю роботу по очищенню успадкованих полів можна покласти на успадковані деструктори. Для виклику успадкованого деструктора необхідно використовується ключове слово Inherited.
виклик конструкторів
Якщо в призначеному для користувача класі не визначений конструктор, то за замовчуванням буде використовуватися конструктор, успадкований від класу-нащадка. У будь-якому випадку у всіх об'єктів є доступ до конструктора Create, визначеному в класі TObject.
Визначення класу створює активну структуру, здатну створювати представників цього класу. Об'єкти, які створюються за допомогою визначення класу, здатні зберігати посилання на новостворювані об'єкти.
• Якщо викликати конструктор від імені об'єкта, то новий об'єкт не буде створено (пам'ять не виділяється), але будуть виконані оператори, зазначені в коді конструктора.
• Конструктор може також викликатися за допомогою змінної типу покажчика на клас.
виклик деструкторов
Деструктори викликаються точно так же, як і більшість інших методів класу - через його діючий екземпляр.
Синтаксис виклику конструктора наступний:
Примітки:
• Після виклику деструктора об'єкт стає недоступний. Доцільно присвоювати об'єкту значення Nil відразу після його знищення, щоб в подальшому можна було б перевірити його існування.
• Не слід викликати деструктори безпосередньо. Виклик методу Free, успадкованого від TObject.Free, порівнює покажчик екземпляра із значенням Nil перед тим, як викликати деструктор Destroy.
Виклики конструкторів і деструкторів візуальних компонентів Delphi. Будь-компонент, який потрапив у ваше застосування при візуальному проектуванні, включається в певну ієрархію об'єктів, яка замикається на формі (клас TFonn). Тому виклик конструкторів і деструкторів всіх компонентів форми проводиться автоматично при ініціалізації і видаленні форми, незримо для програміста.
Самі форми створюються і знищуються додатком - глобальним об'єктом з ім'ям Application. У файлі-проект з розширенням * .Dpr можна побачити виклик конструктора форми у вигляді рядка:
Application.CreateForm (TForml, Fonnl);
Динамічне створення об'єктів. Користувач може створити об'єкт і програмним шляхом:
Var Mem: TMemo;
Begin
Mem: = TMemo.Create (Self); // Створення екземпляра класу TMemo
Mem.Parent: = Self; // Form1 вказувати не обов'язково
Mem.Name:='TmpMem '; // Присвоєння імені компоненту
FindComponent ( 'TmpMem'). Free; // Видалення компонента