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, буде знищено обидва рядки.

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


 

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

63827. Трудоспособность, понятие. Временная нетрудоспособность 25 KB
  Виды нетрудоспособности: временная стойкая длительная инвалидность. При полной временной нетрудоспособности любая работа полностью противопоказана и больной нуждается в создании определённых условий.
63830. Выдача листка нетрудоспособности по беременности и родам, по уходу за больным членом семьи 23 KB
  Срок беременности 30 недель дородовый 70 дней до и 70 дней после. Если роды осложнённые то ещё 16 дней. Если беременность многоплодная то отпуск начинается с 28 недель дородовый 7014 послеродовый 96 дней всего 180 дней.
63831. Санаторно – курортное лечение 22 KB
  Если продолжительность отпуска не покрывает продолжительность СКЛ то на оставшийся период включая дорогу туда и обратно выдаётся Листок нетрудоспособности. Если используется отпуск за 2 3 года то ЛН не выдаётся.
63832. Медико-социальная экспертная комиссия 26.5 KB
  Основными функциями МСЭК являются: 1 определение состояния трудоспособности постоянной стойкой или длительной ее утраты; 2 установление группы инвалидности впервые или при переосвидетельствовании; 3 определение причины стойкой нетрудоспособности...
63833. Планово – экономические вопросы. Планирование здравоохранения 34 KB
  Планирование можно считать одним из принципов организации медицинской помощи. В условиях перехода на новые экономические принципы хозяйствования планирование теряет свои обязательные централизованные функции приобретает...
63834. Финансирование зравоохранения 30.5 KB
  ЛПУ получает средства из разных уровней бюджета. Из областного бюджета содержатся областные ЛПУ из районного бюджета районные ЛПУ и сельские участковые больницы. Взаимоотношения ЛПУ и страховых компаний Обе договорившиеся стороны представляют лицензии на свою деятельность.
63835. Смета лечебно-профилактического учреждения 36.5 KB
  Заработная плата Начисление на зарплату Канцелярские и хозяйственные расходы Командировочные и служебные разъезды Научно исследовательские работы приобретение книг для библиотеки Стипендии Расходы на питание Приобретение медикаментов и перевязочных средств...