КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
ДеструкторДеструктор (destructor) - спеціальний метод класу, використовуваний для руйнування об'єктів класу. Ім'я деструктора збігається з ім'ям конструктора (ім'ям класу), якому передує символ тильда Він завжди має відкритий специфікатор доступу і не має ні типу, ні параметрів. Деструктор управляє знищенням об'єкта з оперативної пам'яті. Викликається деструктор автоматично при руйнуванні об'єкта. Якщо об'єкт створювався динамічно через покажчик за допомогою оператора new, то для знищення такого об'єкта слід використовувати оператор delete для покажчика. Типовим використанням деструктора є звільнення динамічної пам'яті, яка раніше була виділена конструктором. На відміну від конструктора, деструктор не перевантажується і може бути в класі тільки один. Краще завжди визначати деструктор класу, навіть якщо він не виробляє ніяких дій і має порожнє тіло. Оголошення деструктора має наступний формат: public: ~ ім’я_класy (); Наприклад, для класу CBооk прототип деструктора в специфікації класу має вигляд: ~ CBook ();
Лістинг 14.7 CBook () :: ~ CBook () {Delete () m_pTitle;}
Результатом дії деструктора ~ CBook () є звільнення блоку пам'яті з початковим адресою з m_pTitle, виділеного раніше конструктором класу (лістинг 14.7).
Виклик конструктора і деструктора
Як згадувалося раніше, конструктор і деструктор викликаються в програмі автоматично при оголошенні об'єктів класу. Не має значення, чи оголошується об'єкт явно або створюється динамічно за допомогою new. Виклик того чи іншого конструктора залежить від форми опису об'єкта: • Якщо після імені об'єкта або типу класу в операторі new нічого не зазначено або стоять порожні круглі дужки, викличеться конструктор за замовчуванням. • Якщо в дужках записані параметри, викликається конструктор з параметрами. • Якщо в дужках знаходиться ім'я об'єкта, то відбувається виклик конструктора копіювання. Деструктор також викликається автоматично, коли за допомогою оператора delete звільняється покажчик на об'єкт класу. Без оператора delete об'єкт зруйнований не буде. Дозволяється та явний виклик деструктора для об'єкта, який виконується, як і виклик будь-якого іншого методу класу. Деструктори викликаються в порядку, зворотному порядку оголошення іменованих об'єктів у програмі. Виклик деструкторів об'єктів, оголошених через покажчики, визначається проходженням операторів delete для цих указників (лістинг 14.8).
Коли викликаються конструктори і деструктори
Якщо говорити загалом, конструктор викликається при створенні об'єкта, а деструктор - при його знищенні. У наступному списку детально перераховані випадки виклику конструкторів та деструкторів для різного виду об'єктів. • Об'єкт визначений глобально (тобто поза будь-якої функції). Конструктор викликається на самому початку програми до виклику функції main (або WinMain в програмі, що працює в середовищі Windows), деструктор - по закінченні програми. • Об'єкт визначений локально (тобто всередині функції). Конструктор викликається, коли потік управління досягає визначення об'єкта, деструктор - при виході за межі блоку, в якому визначено об'єкт (тобто коли об'єкт виходить з області видимості). • Об'єкт визначений локально з використанням специфікатора static. Кон-структор викликається, коли потік управління вперше досягає визначення об'єкта, деструктор - в кінці програми; • Об'єкт створений динамічно з використанням оператора new. Конструктор викликається при створенні об'єкта, а деструктор - коли об'єкт явно знищується з використанням оператора delete. Якщо цього не відбувається, деструктор не буде викликаний ніколи.
КОНТРОЛЬНІ ЗАПИТАННЯ 1. Що називається класом об'єктів? 2. Дайте визначення поняттю клас? 3. Дайте визначення поняттю об'єкт? 4. Дайте визначення поняттю член класу? 5. Наведіть синтаксис опису класу? 6. Які змінні називаються даними-членами класу та функціями-членами класу? 7. Яку операцію називають операцією розширення області видимості, її форма запису? 8. Які ви знаєте специфікатори доступу до членів класу? 9. Що називається конструктором і деструкцією в об'єктно-орієнтованому програмуванні, для чого вони служать? Лекція 5 Тема: Основи Windows-програмування. Обробка подій. ПЛАН:
|