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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
#1

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

18.01.2014, 21:09. Просмотров 397. Ответов 5
Метки нет (Все метки)

Собственно, такие дела. Использую наследование, несколько цепочек одного от другого 1->2->3->....
И сегодня неожиданно обнаружил, что у самого дочернего класса деструктор не срабатывает (у непосредственно родителей тоже не срабытывал, может, срабатывал у родителей родителей, но я не проверял). Проблема исчезла, когда я сделал деструктор самого базового класса виртуальным.
Почему так происходит? Раньше я думал, что если деструктор базового не виртуальный, то просто не вызовется - но деструктор дочернего сработает. Ан нет...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2014, 21:09     Не срабатывает деструктор и дочернего класса
Посмотрите здесь:

Когда вызывается деструктор класса? C++
C++ Динамический объект класса и деструктор
Деструктор класса C++
Деструктор абстрактного класса C++
C++ Конструктор и деструктор анонимного класса
C++ Доступ к структуре из дочернего класса
C++ Не срабатывает деструктор, и звук издает винда по окончанию отработки программы
Преждевременно срабатывает деструктор C++
C++ Конструкторы и деструктор класса BigInteger
Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса C++
Инициализация членов дочернего класса членами класса родителя C++
деструктор класса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6218 / 3463 / 423
Регистрация: 29.11.2010
Сообщений: 9,176
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
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 21:13     Не срабатывает деструктор и дочернего класса #3
Указателями на базовый класс оперируете?
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6218 / 3463 / 423
Регистрация: 29.11.2010
Сообщений: 9,176
18.01.2014, 21:49     Не срабатывает деструктор и дочернего класса #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Указателями на базовый класс оперируете?
иначе бы проблемы не возникло
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
18.01.2014, 22:13  [ТС]     Не срабатывает деструктор и дочернего класса #5
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал), верно? Проверить настолько глубоко у меня руки не дошли) Спасибо за ответы.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса #6
Цитата Сообщение от monolit Посмотреть сообщение
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал),
Деструктор - один из методов класса. Когда делается вызов метода класса, через указатель на базовый класс, связанный с объектом производного, и этот метод не виртуальный, то будет вызван метод базового класса (по типу уазателя), если метод виртуальный, то будет вызван метод производного класса (по типу объекта).
Yandex
Объявления
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса
Ответ Создать тему
Опции темы

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