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

Обязательно ли объявление виртуального деструктора в абстрактном классе - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Antonioni
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 12
12.08.2014, 10:48     Обязательно ли объявление виртуального деструктора в абстрактном классе #1
Недавно выполнял задание, и забыл в абстрактном классе(использовалось наследование) объявить виртуальный диструктор. С точки зрения профессионального программирования, является ли это серьёзной ошибкой?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 10:48     Обязательно ли объявление виртуального деструктора в абстрактном классе
Посмотрите здесь:

Создать массив в базовом абстрактном классе, и его передать функциям производных классов C++
Объявление константы в классе C++
Объявление переменных в классе C++
Магия виртуального деструктора C++
Двумерный динамический массив в классе. Зависание при вводе и вызове деструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Trwsdf
Заблокирован
13.08.2014, 10:49     Обязательно ли объявление виртуального деструктора в абстрактном классе #21
Цитата Сообщение от ct0r Посмотреть сообщение
Компилятор и не выдает никакой ошибки. Это же runtime-ошибка, а не compile-time.
Цитата Сообщение от ct0r Посмотреть сообщение
Ты неправильно понимаешь термин undefined behavior. Там поведение зависит не только от особенностей реализации компилятора и его опций, но и от состояния памяти в данный момент времени. То есть можно легко получать разные ошибки на разных системах, несмотря на то, что программа собиралась каким-то конкретным компилятором и она одна. Ты же говоришь не про undefined behavior, а про implementation-defined или unspecified behavior. Но в данном случае имеет место именно undefined behavior, а его допущение - грубая ошибка разработчика.
Речь идет о том, что компилятор не знает истинного размера объекта для его удаления, а стало быть просто ставит размер базового класса, при удалении. Однако, если размер потомка больше, чем размер базового класса, мы либо получим ошибку времени выполнения, либо утечку памяти ( о которой я и писал в первом посте темы, за что меня и начали унижать). Причем, результат не определен и да, как я и говорил, каждый компилятор волен действовать здесь по своему.
Насчет implementation-defined , я не мог так считать, ибо в таком случае мы бы получили правильную и работоспособную программу, где я говорил, что при сбое или утечке памяти все нормально хорошо? Ваши фантазии держите при себе.

Изначально меня ввели в заблуждение ошибочные ответы т.н. "экспертов", а именно, что компилятор, прежде чем запускать приложение, выдает ошибку, в тот момент не было времени на проверку. После, проверив эту информацию, я понял, всю несостоятельность критики в мой адрес, а также убедился в очередной раз в некомпететнтости и глупости "знающих людей" этого форума.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
13.08.2014, 10:57     Обязательно ли объявление виртуального деструктора в абстрактном классе #22
Цитата Сообщение от Trwsdf Посмотреть сообщение
Речь идет о том, что компилятор не знает истинного размера объекта для его удаления, а стало быть просто ставит размер базового класса, при удалении
Э-э-э, опять фантазии уровня строгих указателей, размер тут совершенно ни при чем. Уважаемый "эксперт", сами разберетесь где заблуждаетесь или разжевать?
Trwsdf
Заблокирован
13.08.2014, 11:17     Обязательно ли объявление виртуального деструктора в абстрактном классе #23
Цитата Сообщение от Voivoid Посмотреть сообщение
Э-э-э, опять фантазии уровня строгих указателей, размер тут совершенно ни при чем. Уважаемый "эксперт", сами разберетесь где заблуждаетесь или разжевать?
ок, тогда и Страуструп в своей книге "Страуструп Б. Язык Программирования С++ - 2011" на стр. 510 пишет черт знает о чем. Согласен мы с ним оба "фантазеры" перед "папками" сидящими здесь.

Добавлено через 9 минут
насчет строгих указателей, советую вам наконецто то разобраться с ними. Что такое int*a и что такое int* a[10], чтобы меньше позориться.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
13.08.2014, 11:17     Обязательно ли объявление виртуального деструктора в абстрактном классе #24
Trwsdf, ты пишешь бред. Хотя бы сам возьми и проверь свою "гипотезу". Покажи, как деструктор вообще может влиять на утечки памяти??? Деструктор вызывается в коде, который проводит деаллокацию объекта, при этом сам ничего о деаллокации знать не может. Ему всё равно, объект в куче или на стеке и.т.д.
Trwsdf
Заблокирован
13.08.2014, 11:32     Обязательно ли объявление виртуального деструктора в абстрактном классе #25
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Trwsdf, ты пишешь бред. Хотя бы сам возьми и проверь свою "гипотезу". Покажи, как деструктор вообще может влиять на утечки памяти??? Деструктор вызывается в коде, который проводит деаллокацию объекта, при этом сам ничего о деаллокации знать не может. Ему всё равно, объект в куче или на стеке и.т.д.
Омг ))). Ну ок все дураки и я и Страуструп, один ты умный.
Сиди дальше тут и крути коровам хвосты на этом форуме "самый умный", а мне некогда, мне надо работать.

Информация для остальных администраторов форума приписавших себе титул "экспертов" с++ , можете лить грязь в догонку сколько хотите, я же себя уважаю, и сдержал слово, насчет ухода отсюда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 11:34     Обязательно ли объявление виртуального деструктора в абстрактном классе
Еще ссылки по теме:

C++ Возвращаемый тип конструктора копирования в абстрактном классе
Почему при переопределении виртуального метода в производном классе выводится метод базового? C++
Объяснить использование виртуального деструктора C++

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

Или воспользуйтесь поиском по форуму:
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,284
13.08.2014, 11:34     Обязательно ли объявление виртуального деструктора в абстрактном классе #26
Цитата Сообщение от Trwsdf Посмотреть сообщение
Страуструп в своей книге "Страуструп Б. Язык Программирования С++ - 2011" на стр. 510 пишет черт знает о чем
У меня этой книги нет под рукой. Если приведешь цитату - я тебе объясню что там имеется в виду.

Не по теме:

Цитата Сообщение от Trwsdf Посмотреть сообщение
насчет строгих указателей, советую вам наконецто то разобраться с ними. Что такое int*a и что такое int* a[10], чтобы меньше позориться.
Ты в той теме лучше что-нибудь ответь

Yandex
Объявления
13.08.2014, 11:34     Обязательно ли объявление виртуального деструктора в абстрактном классе
Ответ Создать тему
Опции темы

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