Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 21:53   #1
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию Использование виртуального деструктора

Добрый вечер. Есть класс TElement, в котором объявлен вирт. деструктор
virtual ~TElement();
и есть класс TKRect(для которого TElement - предок) со своим вирт. деструктором с таким телом
TKRect::~TKRect()
{
TElement::~TElement();
}
Выдается ошибка
\Kurs1\RECT.CPP||In destructor `virtual TKRect::~TKRect()':|
\Kurs1\RECT.CPP|16|error: no matching function for call to `TKRect::TElement()'|
\Kurs1\_ELEMENT.h|12|note: candidates are: virtual TElement::~TElement()|
||=== Build finished: 1 errors, 0 warnings ===|

Подскажите пожалуйста, как ее решить.
Fataller вне форума Ответить с цитированием
Старый 12.12.2009, 21:55   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

виртуальный деструктор предка не нужно вызывать самостоятельно, он будет вызван автоматически
netrino вне форума Ответить с цитированием
Старый 12.12.2009, 22:00   #3
Fataller
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 62
По умолчанию

Даже в том случае, если у деструктора предка не пустое тело?
Fataller вне форума Ответить с цитированием
Старый 12.12.2009, 22:08   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А какой смысл его вызывать, если оно пустое?
Деструктор предка, даже не виртуальный, будет вызван после деструктора сына. Но есть одно "но", если использовать полиморфизм и удалять производный класс по ссылке на базовый, а в базовом деструктор будет невиртуальным, то деструктор производного не будет вызван. Вообще говоря это единственная причина, по которой деструктор следует объявлять виртуальным, если полиморфизм не используется, то он(деструктор) может быть обычным(невиртуальным)

Последний раз редактировалось netrino; 12.12.2009 в 22:11.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу Документированный Драйвер Для Создания Виртуального Hdd(cdrom) 260db Свободное общение 6 21.06.2009 14:10
Чем отличается скан-код от виртуального кода клавиши? The_Darkness Помощь студентам 2 18.07.2008 17:01
Разработка виртуального принтера studentTomsk Помощь студентам 3 03.02.2008 13:39
созданию виртуального стенда по механике VALIK Общие вопросы Delphi 1 22.02.2007 18:25