АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Лістинг 21.5. Програма VirtDest

Читайте также:
  1. I ПРОГРАМА КУРСУ
  2. Державна національна програма “Освіта” (“Україна XXI століття”)
  3. ЕТАПИ, ВИМОГИ, ПРОГРАМА ДОСЛІДЖЕННЯ.
  4. Лістинг 21.6 NormBase.
  5. НАВЧАЛЬНА ПРОГРАМА ДИСЦИПЛІНИ
  6. НАВЧАЛЬНА ПРОГРАМА КУРСУ
  7. Програма
  8. ПРОГРАМА
  9. Програма OpenVPN
  10. ПРОГРАМА КУРСУ
  11. Програма літньої зміни оздоровчого табору для дітей
#include <iostream.h> using namespace std; Class Base { public: ̃Base() //невіртуальний деструктор // virtual ̃Base() //віртуальний деструктор { cout << “ Base видалений \n”;} }; Class Derv: public Base { public: ̃Derv() { cout << “ Derv видалений \n”;} }; int main() { Base* pBase=new Derv; delete pBase; return 0; } Програма виведе результат: Base видалений

 

Це говорить про те. Що деструкція для Derv не викликається взагалі! До такого результату привело те, що деструкція базового класу в приведеному лістингу невіртуальна. Виправити це можна, закоментувавши першу стрічку визначення деструкції і активізувавши другу. Тепер результатом роботи програми є: Derv видалений Base видалений Тільки тепер обидві частини об’єкту породженого класу видалено коректно. Звичайно, якщо жодна з деструкцій нічого особливо важливого не робить (наприклад, просто звільняє пам’ять, зайняту за допомогою new), тоді їх віртуальність перестає бути такою вже необхідною. Але в загальному випадку, щоб бути упевненим в тому, що об’єкти породжених класів видаляються так, як потрібно, слід завжди робити деструкції в базових класах віртуальними. Більшість бібліотек класів мають базовий клас, в якому є віртуальна деструкція, що гарантує нам наявність віртуальних деструкцій в породжених класах.
     

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.002 сек.)