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

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

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

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

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

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

Преждевременно срабатывает деструктор - C++
Здравствуйте! Не могли бы вы помочь со следующей проблемой: реализую класс матрицы (здесь часть исходников): // Matrix.h ...

Не срабатывает деструктор, и звук издает винда по окончанию отработки программы - C++
Добрый вечер ребят подскажите пожалуйста , нужно чтобы имя пароль и дата рождения хранились в динамической памяти правильны мои рассуждения...

Почему деструктор срабатывает больше раз, чем количество созданных объектов? - C++
Вопрос в заголовке темы. Почему? Создается всего 2 объекта, но деструктор вызывается трижды. Вот пример #include <iostream> #include...

деструктор класса - C++
Здравствуйте! Я скопировал код отсюда https://msdn.microsoft.com/ru-ru/library/6t4fe76c.aspx себе в Visual Studio 2015, после...

Деструктор класса - C++
Имеется собственный класс, возник вопрос, деструктор класса вызывается не явно ? если так, то в какой момент он вызывается ?

Деструктор класса список - C++
Доброго времени суток. Создал класс односвязный список. Не знаю как сделать деструктор таким, чтобы он удалял все элементы списка. В том...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
7171 / 4337 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 21:13     Не срабатывает деструктор и дочернего класса #3
Указателями на базовый класс оперируете?
MrGluck
Модератор
Эксперт CЭксперт С++
7171 / 4337 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
18.01.2014, 21:49     Не срабатывает деструктор и дочернего класса #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Указателями на базовый класс оперируете?
иначе бы проблемы не возникло
monolit
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
18.01.2014, 22:13  [ТС]     Не срабатывает деструктор и дочернего класса #5
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал), верно? Проверить настолько глубоко у меня руки не дошли) Спасибо за ответы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса
Еще ссылки по теме:

Деструктор абстрактного класса - C++
Почему деструктор абстрактного класса нужно делать виртуальным?

Конструкторы и деструктор класса BigInteger - C++
Задание выглядит так. Определить класс BigInteger в файле BigInteger.h, который может быть использован для хранения больших...

Конструктор и деструктор анонимного класса - C++
Здравствуйте. Есть ли в С++ такая возможность? Очень нужна именно такая реализация класса, но если это невозможно, буду думать.

Динамический объект класса и деструктор - C++
Добрый вечер. Есть класс, конструктор и деструктор: class B { int a; public: B (); ~B (); };

Когда вызывается деструктор класса? - C++
Вопрос собственно в том, когда происходит освобождение памяти, занимаемой объектом класса? Допустим имеем #include <iostream> struct...

Указатель дочернего класса в базовом - C++
Добрый день. ОШИБКА: ..\main.cpp:6: error: invalid use of incomplete type 'struct A' ..\main.cpp:3: error: forward declaration of...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса #6
Цитата Сообщение от monolit Посмотреть сообщение
Т.е. у меня срабатывал деструктор самого базового класса (да, указателями на объекты такого типа я и оперировал),
Деструктор - один из методов класса. Когда делается вызов метода класса, через указатель на базовый класс, связанный с объектом производного, и этот метод не виртуальный, то будет вызван метод базового класса (по типу уазателя), если метод виртуальный, то будет вызван метод производного класса (по типу объекта).
Yandex
Объявления
18.01.2014, 22:49     Не срабатывает деструктор и дочернего класса
Ответ Создать тему
Опции темы

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