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

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


 

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

4746. Выбор напряжений питающих линии и расположение трансформаторных подстанций и их модернизация 966 KB
  Введение. Для обеспечения электроэнергией в необходимом количестве и соответствующего качества служат системы электроснабжения промышленных предприятий, состоящие из сетей напряжением до 1000 В и выше и трансформаторных, преобразовательных, и распре...
4747. Рычажный механизм перемещения транспортного желоба качающегося конвейера 219 KB
  Объектом исследования является рычажный механизм перемещения транспортного желоба качающегося конвейера. Механизмы вытяжного конвейера включает в себя различные механизмы, из которых исследованию подлежат - рычажный, зубчатый, планетарный и...
4748. Право интеллектуальной собственности. Авторское право 62 KB
  Право интеллектуальной собственности Авторское право Авторское право (lawofcopyright) представляет собой совокупность правовых норм, регулирующих порядок использования произведений литературы, науки и искусства. Авторское право историчес...
4749. Электронная торговля. Курс лекций 187.45 KB
  Глобальная сеть интернет Лекция 1. Глобальная сеть Интернет Основные понятия: сеть Интернет организации, поддерживающие порядок в сети структура сети Интернет протоколы сети домены система адресации всемирная паутина электронная почта...
4750. Развитие представлений учащихся о процессоре создания мультимедийных презентаций Power Point 185 KB
  Введение Компьютер – мощнейшее средство по созданию и распространению рекламы. Главное что от вас требуется, это придумать сценарий, построенный на использовании изображений, анимации, броского запоминающего текста. Иллюстрируя свой рассказ ани...
4751. Разработка автоматизированной информационной системы МРЭО ГАИ 3.01 MB
  При проектировании программного продукта, было принято решение разработать и автоматизировать работу сотрудников ГИБДД путем внедрения автоматизированной информационной системы. Разработанная автоматизированная информационная система эффективна и пр...
4752. Использование массивов при обработке больших объемов информации 979.28 KB
  Массивы Многие задачи, которые решаются с помощью компьютера, связаны с обработкой больших объемов информации, представляющей совокупность данных, объединенных единым математическим содержанием или связанных между собой по смыслу. Такие данные удобн...
4753. Массивы. Многомерные массивы в программировании. Преобразование двухмерных массивов 1.68 MB
  Массивы. Многомерные массивы Часто бывает необходимо представить таблицы данных в формате строк и столбцов. Для этого используют многомерные массивы. Доступ к элементам, например, двухмерного массива (матрицы) осуществляется с помощью двух индексов....
4754. Работа со строками в программировании 1.12 MB
  Работа со строками В реальных задачах часто встречаются объекты символьного типа – строки. Строка в Pascal трактуется как последовательность символов. В состав строки могут входить буквы латинского алфавита, кириллица, цифры, всевозможные знаки...