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

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


 

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

59258. Скликаєм усіх на бал, на осінній карнавал 43 KB
  Осінь: Мене напевно не чекали Та вже прийшла моя пора. І ви мене усі впізнали Я – Щедра Осінь золота. Осінь: Ти Гарбуз всьому господар Ти найбільший на городі.
59260. Де Купало ночувало 43 KB
  Дівчата готують святкові строї хлопці – приладдя для парубоцьких ігор старі жіночки випікають солодощі для гостини. За день до проведення свята пізно ввечері хлопці ховають у схованки сюрпризи для дівчат а дівчата мають знайти їх пізно ввечері перед закінченням свята.
59261. Малі олімпійські ігри 43.5 KB
  Ознайомити дітей з історією Олімпійських ігор; З культурою і традиціями Стародавньої Греції символікою Олімпійських ігор прапор факел; Поглибити знання дітей про видатних спортсменів України; Розвивати інтерес до пізнання історії спорту нашої країни...
59262. ПІСНЯ – ДУША НАРОДУ 55.5 KB
  Яке диво дивне народна пісня Яку владну силу таїть вона в собі Минають віки змінюються суспільні устрої потрясають світ нищівні війни і голодомори на зміну одним поколінням приходять інші у кожного свої смаки свої уподобання.
59263. Разработка внутрифирменных практик ускоренного развития Менеджеров отделений страховой компании «АЛИКО» в интересах лидерства в темпах роста 3.33 MB
  Значение страхования жизни для экономики Российской Федерации остается пока минимальным в связи с небольшим объемом рынка по страхованию жизни. Доля премий по страхованию жизни в ВВП по-прежнему снижается
59264. Сценарій спортивного вечора у початковій школі 32.5 KB
  Вчитель. Змагання буде проводити вчитель фізвиховання судитимуть змагання. Вчитель фізкультури. Вчитель фізкультури.
59265. Інсценізація за мотивами української народної казки Украдене щастя (Естрадна казка) 42.5 KB
  Відбувається на хуторі, біля ґрунтової дороги, неподалік від хати Газди. На дорозі через весь шлях велика холобина, де завжди грузнуть коні і вози, просто навпроти хати Газди.
59266. Розцвіла верба – прийшла справжня весна 30 KB
  Ми чекаємо коли весна прижене холод устелить землю травичкою уквітчає квітами а пташки наповнять ліс веселими співами. Весела гарна кучерява маленька дівчинка Весна Біжить сміється сіє трави І пісня ллється голосна.