|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.06.2010, 06:47 | #11 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
OK. Благодарю за информацию!
|
15.06.2010, 09:44 | #12 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Если класс абстрактный, то либо это сферический класс в вакууме и тогда пользы от него вообще никакой, либо у него будут наследники. Если у класса есть наследники, ему необходим виртуальный деструктор.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
15.06.2010, 10:28 | #13 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Гром
Точнее будет сказать, что виртуальный деструктор нужен базовому классу (т.е. классу имеющему классы-наследники) содержащему хотя бы один виртуальный метод; AFAIK базовому классу не имеющему виртуальных методов виртуальный деструктор нужен как собаке пятая нога. Все это в общем-то понятно... Вопрос был в другом: мне не понятно, почему разработчики C++ не сделали так, чтобы деструктор класса объявлялся виртуальным автоматически при появлении в этом классе хотя-бы одного виртуального метода? Я решил что может быть чего-то не понимаю, и по этому попросил привести примеры случаев в которых может потребоваться оставить деструктор класса не виртуальным при наличии в этом классе виртуальных методов. Carbon на вскидку привел парочку таких примеров Если вы приведете свои примеры буду благодарен... |
15.06.2010, 10:39 | #14 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Наличие виртуального деструктора никак не связано с наличием виртуальных методов.
Код:
Деструкторы должны быть виртуальными всегда, когда предполагается наличие наследников у класса. |
15.06.2010, 18:36 | #15 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
pu4koff
Простите нуба, но я что-то торможу: для чего может понадобиться обращаться к объекту класса-потомка не имеющему виртуальных функций (не считая виртуального деструктора) через указатель на объект класса-родителя? Я просто не вижу в этом смысла; с объектом на который указывает данный указатель ничего нельзя сделать кроме как корректно удалить (учитывая виртуальный деструктор)... Как я понимаю, такой указатель применяемый совместно с виртуальными функциями нужен для реализации полиморфизма, которого в данном примере (за исключением деструктора) не наблюдается... Можно конечно использовать такой указатель для последующего приведения его к типу объекта на который он указывает с помощью dinamic_cast, но тогда все равно не понятно: зачем городить огород с удалением объекта через такой указатель, если его можно удалить после приведения типа указателя к типу объекта. Последний раз редактировалось Oleg_SK; 15.06.2010 в 18:43. |
15.06.2010, 19:21 | #16 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
На правах кэпа скажу:
Стандарт позволяет приводить указатель на объект производного класса к указателю на объект базового. Надеюсь тут вопросов нет? Просто следите за мыслью. Стандарт не гарантирует, что каждая строчка кода будет осмысленной. Поэтому мне вдруг может прийти в голову ради прикола сделать A * obj = new B(); причём невозбранно. А если стандарт позволяет подобное (т.е. есть потенциальная возможность, что такой код будет), то тот, кто пишет класс, должен быть готов к такому (защита от дурака и его дурацкой утечки памяти). |
15.06.2010, 20:38 | #17 |
Пользователь
Регистрация: 06.06.2010
Сообщений: 42
|
Понятно... Бдагодарю за разъяснение!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[C++] Указатель на производный класс в базовом | Student_IT | Общие вопросы C/C++ | 3 | 06.06.2010 07:06 |
Как в базовом классе описать указатель на объект производного класса? | MasterGH | Общие вопросы C/C++ | 3 | 16.11.2009 02:55 |
Классы(абстрактный и наследование) | Пепел Феникса | Общие вопросы C/C++ | 6 | 02.11.2009 01:18 |
Наследование: абстрактный класс | zak | Общие вопросы C/C++ | 4 | 22.12.2007 13:49 |