Форум программистов, компьютерный форум CyberForum.ru

Не срабатывает деструктор и дочернего класса - C++

Восстановить пароль Регистрация
 
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
18.01.2014, 21:09     Не срабатывает деструктор и дочернего класса #1
Собственно, такие дела. Использую наследование, несколько цепочек одного от другого 1->2->3->....
И сегодня неожиданно обнаружил, что у самого дочернего класса деструктор не срабатывает (у непосредственно родителей тоже не срабытывал, может, срабатывал у родителей родителей, но я не проверял). Проблема исчезла, когда я сделал деструктор самого базового класса виртуальным.
Почему так происходит? Раньше я думал, что если деструктор базового не виртуальный, то просто не вызовется - но деструктор дочернего сработает. Ан нет...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
18.01.2014, 21:11     Не срабатывает деструктор и дочернего класса #2
По стандарту:
In the first alternative (delete object), if the static type of the operand is different from
its dynamic type, the static type shall be a base class of the operand's dynamic type and
the static type shall have a virtual destructor or the behavior is undefined.
http://habrahabr.ru/post/64280/

Добавлено через 29 секунд
И важно помнить, что по умолчанию (без явного объявления) деструктор виртуальным не является.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 21:13     Не срабатывает деструктор и дочернего класса #3
Указателями на базовый класс оперируете?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
18.01.2014, 21:49     Не срабатывает деструктор и дочернего класса #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Указателями на базовый класс оперируете?
иначе бы проблемы не возникло
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
18.01.2014, 22:13  [ТС]     Не срабатывает деструктор и дочернего класса #5
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал), верно? Проверить настолько глубоко у меня руки не дошли) Спасибо за ответы.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса #6
Цитата Сообщение от monolit Посмотреть сообщение
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал),
Деструктор - один из методов класса. Когда делается вызов метода класса, через указатель на базовый класс, связанный с объектом производного, и этот метод не виртуальный, то будет вызван метод базового класса (по типу уазателя), если метод виртуальный, то будет вызван метод производного класса (по типу объекта).
Yandex
Объявления
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса
Ответ Создать тему
Опции темы

Текущее время: 10:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru