![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
vitlic |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
Недавно читал Мейрса. В его книжке описана оптимизация, которую он называет EBO, "Empty Base Optimization". Про оптимизацию я все понял, да и про нулевой размер, но не понял одного, когда появляется надобность в использование пустого базового класса? И что будет если с производным классом работать полиморфно (базовый класс пустой, значит дефолтный деструктор не виртуальный), не приведет ли это к утечкам памяти?
пасиб заранее) |
|||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
приведет.
когда ты пишешь иерархию, но надобности в членах в базовом классе нет. Вполне вероятный случай где-нибудь типа STL. Такая иерархия не предназначена для полиморфного использования. |
||||
|
|||||
vitlic |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 22.2.2007 Где: где home(){return где="тут"} Репутация: 1 Всего: 1 |
понимаю суть, но не могу представить применения. В java все понятно, там один класс Object, от которого наследуют все, и это не приводит к утечкам памяти и т.д. Я не могу представить себе примера, когда могла бы понадобиться, такая не совершенная конструкция в с++. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
а что в ней несовершенного? О EBO имеет смысл говорить, когда рассматривается вопрос о неоткрытом наследовании против композиции и всвязи с затратами памяти. Поэтому вобщем полиморфное использование вообще не расматривается. Пустой класс это класс не содержащий нестатических данных , виртуальных функций и виртуальных базовых классов, но ничего не мешает ему иметь невиртуальные функции, typedef, перечисления, статические данные (может еще что-то забыл). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |