68955

Віртуальні деструктори

Лекция

Информатика, кибернетика и программирование

Явний опис деструкторів у програмах потрібний лише тоді, коли обєкт створюється у динамічній памяті. При використанні віртуальних деструкторів досить очевидними є переваги поліморфізму. Зазвичай, вони застосовуються тоді, коли при знищенні обєктів необхідно видалити обєкти похідного класу...

Украинкский

2014-09-28

26.5 KB

0 чел.

Лекція № 17

Тема: Віртуальні деструктори

Явний опис деструкторів у програмах потрібний лише тоді, коли об'єкт створюється у динамічній пам'яті. При використанні віртуальних деструкторів досить очевидними є переваги поліморфізму. Зазвичай, вони застосовуються тоді, коли при знищенні об'єктів необхідно видалити об'єкти похідного класу, на які посилаються покажчики на базовий клас. Саме це демонструє нижченаведений приклад.

#include<string.h> class TBase

{

private:

char *spl;

public:

TBase(const char *s)

{

spl = strdup(s) ;

}

virtual ~TBase()

{

delete spl;

}

};

class TDerived: public TBase

{

private: char *sp2; public: TDerived(const char*sl, const char *s2):TBase (s1)

{

sp2 = strdup(s2);

}

virtual -TDerived()

{

delete sp2;

} };

У головній програмі організуємо демонстрацію створення та знищення об'єкту похідного класу TDerived:


void main
() {

TBase *pbase;

pbase=new TDerived("String 1","String 2"); delete pbase;

}

Проведемо деяке додаткове спостереження даного коду та зробимо деструктор на деякий час звичайним, невіртуальним. Тоді останнім оператором головної програми при видаленні об'єкта через покажчик базового класу було б викликано лише деструктор базового класу, залишивши у динамічній пам'яті незвільнений рядок у вигляді sp2. Ця проблема розв'язується оголошенням віртуальних деструкторів: гарантовано, що у разі, коли знищується об'єкт класу TDerived, адресований покажчиком на TBase, буде знищено обидва рядки.

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


 

А также другие работы, которые могут Вас заинтересовать

69997. КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ 65.5 KB
  Цель: Ознакомление с концепцией контекстного представления устройств в современных операционных системах, получение практических навыков по составлению, написанию и отладке программ, осуществляющих аппаратно-независимый вывод информации на экран дисплея, принтеры...
69998. СРЕДСТВА ВВОДА ИНФОРМАЦИИ 57 KB
  Цель: Ознакомление с устройствами, осуществляющими ввод информации в компьютер (мышь, клавиатура), их программным представлением в операционной системе, а также с программными элементами взаимодействия пользователя и ЭВМ (диалоговые окна), получение практических навыков по составлению...
70000. Модернизация электропривода нажимных винтов 15.8 MB
  В проекте был выбран аналогичный по мощности и скорости асинхронный двигатель, преобразователь частоты, выбран векторный способ управления, произведен расчет статического момента. Система управления, построенная по принципу подчиненного регулирования, оптимизирована, рассчитаны...
70001. Правонарушения и преступления в банковской сфере 174.33 KB
  Сущность правонарушений и преступлений и их воплощение в банковской сфере. Регулирование незаконной банковской деятельности и ответственности за нее в зарубежном законодательстве Виды правонарушений и преступлений совершаемых в банковской сфере и их анализ
70002. Анализ положений гражданского и жилищного законодательства РФ 257.5 KB
  Целью представленной работы является анализ положений гражданского и жилищного законодательства РФ в определении объекта жилищных прав жилого помещения исследовать выселение как институт жилищного права и порядок исполнения судебного решения о выселении.
70005. Оцінка сучасного стану та перспективи розвитку ринку банківських послуг в Україні на прикладі ПАТ Акціонерний банк «Південний» 526 KB
  Глобалізація фінансових ринків, сучасні тенденції розвитку світової та національної економіки відображають процес переходу від екстенсивного до інтенсивного розвитку банківської системи. Це проявляється у розширенні сфер діяльності банків, опануванні ними нових сегментів ринку...