Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Antonioni
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 12
#1

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

12.08.2014, 10:48. Просмотров 1479. Ответов 25
Метки нет (Все метки)

Недавно выполнял задание, и забыл в абстрактном классе(использовалось наследование) объявить виртуальный диструктор. С точки зрения профессионального программирования, является ли это серьёзной ошибкой?
http://www.cyberforum.ru/cpp-beginners/thread984551.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 10:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обязательно ли объявление виртуального деструктора в абстрактном классе (C++):

Объяснить использование виртуального деструктора
Ребят для чего здесь используется виртуальный деструктор? using namespace...

Написание функций, которые объявлены в абстрактном классе
Добрый день. Подскажите, как написать тело функций, которые объявлены в...

Возвращаемый тип конструктора копирования в абстрактном классе
Здравствуйте! Есть абстрактный класс (с "чистыми" виртуальными функциями), и...

Создать массив в базовом абстрактном классе, и его передать функциям производных классов
есть полностью абстрактный (виртуальный) класс. там все функции виртуальные и...

Двумерный динамический массив в классе. Зависание при вводе и вызове деструктора
Объект класса содержит двумерный массив строк фиксированного размера(80) и...

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

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

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

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

Не по теме:

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

0
13.08.2014, 11:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 11:34
Привет! Вот еще темы с решениями:

Почему при переопределении виртуального метода в производном классе выводится метод базового?
Всем добра! Помогите разобраться почему при переопределении виртуального...

Объявление операторов в классе
Всем привет, объясните простым языком, когда используется ссылка(&) и когда не...

Непонятное объявление в классе
Здравствуйте! Помогите разобраться в следущем коде: typedef float (*...

Объявление матрицы в классе
Доброго времени суток. Захотел объявить и инициализировать матрицу в классе, и...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

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