Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Невиртуальный деструктор 
:(
    Опции темы
zzkoderzzzx
Дата 16.10.2013, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Известно, что надо всегда делать деструктор виртуальным. 
Тем не менее он не становится виртуальным без участия программиста. 
Значит разработчиками С++ была предусмотрена ситуация, когда есть необходимость в невиртуальном деструкторе. 
Какие вы можете привести примеры таких ситуаций?
PM MAIL   Вверх
azesmcar
Дата 16.10.2013, 15:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zzkoderzzzx @  16.10.2013,  15:43 Найти цитируемый пост)
Известно, что надо всегда делать деструктор виртуальным.

откуда это известно? ничего подобного  smile 

Цитата(zzkoderzzzx @  16.10.2013,  15:43 Найти цитируемый пост)
Тем не менее он не становится виртуальным без участия программиста. 

правильно, потому-что это нужно далеко не всегда, ровно как и не всегда обыкновенная функция должна быть виртуальной.

Цитата(zzkoderzzzx @  16.10.2013,  15:43 Найти цитируемый пост)
Какие вы можете привести примеры таких ситуаций? 

весь STL
PM   Вверх
zzkoderzzzx
Дата 16.10.2013, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Цитата(azesmcar @ 16.10.2013,  15:56)
весь STL

STL использует классы, но при этом нарушает все парадигмы ООП. Поэтому пример не очень хороший.

Добавлено @ 16:41
Цитата(azesmcar @ 16.10.2013,  15:56)
не всегда обыкновенная функция должна быть виртуальной.

В настоящих ОО-языках все методы виртуальные.

Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:42
PM MAIL   Вверх
azesmcar
Дата 16.10.2013, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zzkoderzzzx @  16.10.2013,  16:40 Найти цитируемый пост)
STL использует классы, но при этом нарушает все парадигмы ООП. Поэтому пример не очень хороший.

что значит нарушает? Код STL вообще не обьектно ориентированный.

Цитата(zzkoderzzzx @  16.10.2013,  16:40 Найти цитируемый пост)
В настоящих ОО-языках все методы виртуальные.

вызов виртуального метода имеет накладные расходы и далеко не всегда имеет смысл делать функцию виртуальной.
все методы виртуальны в Java, но скажем в C# такого нет.

Это сообщение отредактировал(а) azesmcar - 16.10.2013, 16:57
PM   Вверх
bems
Дата 16.10.2013, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(zzkoderzzzx @  16.10.2013,  16:40 Найти цитируемый пост)
В настоящих ОО-языках все методы виртуальные.

да, но далеко не всегда нужно применять ООП 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
zzkoderzzzx
Дата 16.10.2013, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Цитата(azesmcar @ 16.10.2013,  16:57)
Код STL вообще не обьектно ориентированный.

не ОО код значит плохой код

Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:59
PM MAIL   Вверх
bems
Дата 16.10.2013, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(zzkoderzzzx @  16.10.2013,  16:58 Найти цитируемый пост)
не ОО код значит плохой код

охлол


--------------------
Обижено школьников: 8
PM MAIL   Вверх
NoviceF
Дата 16.10.2013, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



 smile По какому поводу обострение? Опять не прошёл собеседование из-за проблем с плюсами?
PM MAIL   Вверх
vinter
Дата 16.10.2013, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

STL использует классы, но при этом нарушает все парадигмы ООП

О как. Давай-ка по пунктам, на примере std::vector, расскажи какие-такие "парадигмы" ООП нарушаются.

Это сообщение отредактировал(а) vinter - 16.10.2013, 17:24


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 16.10.2013, 17:26 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



PM   Вверх
azesmcar
Дата 16.10.2013, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zzkoderzzzx @  16.10.2013,  16:58 Найти цитируемый пост)
не ОО код значит плохой код

кто так решил? расскажи это Степанову smile 

Это сообщение отредактировал(а) azesmcar - 16.10.2013, 18:15
PM   Вверх
baldina
Дата 16.10.2013, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(zzkoderzzzx @  16.10.2013,  16:40 Найти цитируемый пост)
STL ...  нарушает все парадигмы ООП

с этого места поподробнее, что именно нарушается

Цитата(zzkoderzzzx @  16.10.2013,  16:40 Найти цитируемый пост)
В настоящих ОО-языках

определение настоящего ООЯ в студию плиз

Цитата(zzkoderzzzx @  16.10.2013,  16:58 Найти цитируемый пост)
не ОО код значит плохой код

расскажите это Кнуту и Вирту

Деструктор должен быть виртуальным, если предполагается (позволяется) наследование.
Даже при "чиста ОО" подходе далеко не все классы должны иметь наследников.
С++ мультипарадигмный язык, в нем необязателен тезис "все есть объект", так что делать все деструкторы виртуальными неразумно.
PM MAIL   Вверх
kemiisto
Дата 16.10.2013, 19:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Можно было бы сразу призвать в этот топик санитаров, но пойдём более конструктивным путём. smile 

Откуда, уважаемый, дровишки? Вы где всего этого, мягко скажем, бреда поначитались?

Нам бы знать, так сказать, на будущее.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
zzkoderzzzx
Дата 16.10.2013, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 1.10.2013

Репутация: нет
Всего: нет



Цитата(vinter @ 16.10.2013,  17:24)
О как. Давай-ка по пунктам, на примере std::vector, расскажи какие-такие "парадигмы" ООП нарушаются.

1. protected члены-данные нарушают принцип инкапсуляции в классах-наследниках
2. нельзя полноценно наследовать классы от vector за счет невиртуального деструктора
3. нет виртуальных методов, а следовательно и полиморфизма

Основные 3 принципа ООП нарушены.
 
Можно добавить замечание про код с макросами, бессмысленными названиями, чрезмерным использованием символа _ (часто встречается даже __ ). 
Такой код практически нигде не пройдет code review .

PM MAIL   Вверх
azesmcar
Дата 16.10.2013, 19:36 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(zzkoderzzzx @  16.10.2013,  19:32 Найти цитируемый пост)
2. нельзя полноценно наследовать классы от vector за счет невиртуального деструктора

Нельзя наследоваться потому, что он для этого не предназначен. Неужели ты думаешь, что любой класс предназначен для наследования?

Цитата(zzkoderzzzx @  16.10.2013,  19:32 Найти цитируемый пост)
3. нет виртуальных методов, а следовательно и полиморфизма

Открою тебе секрет. Весь STL построен на полиморфизме smile 
Полиморфизм это не виртуальные функции. Виртуальные функции всего лишь один из методов для реализации динамического полиморфизма.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0956 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.