Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет yigal_s ([info]yigal_s)
@ 2004-05-28 16:47:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Мерзкий Страусиный Труп !
Всё же ужасно грустно, что в любимом моём С++ нет блока try-finally.

Как ни дёргайся, а пристойный exception-safe код написать никак не получается. И временами это просто уже бесит.
Image


(Читать комментарии) - (Добавить комментарий)


[info]yigal_s@lj
2004-05-28 23:12 (ссылка)
> чтобы базовые классы были под это заточены изначально

Да, это верно.

С другой стороны, вовсе нет железных гарантий в том, что любые базовые классы должны быть объединены через виртуальное наследование. К примеру, в Eifel-e, если не ошибаюсь, можно задавать и более сложное объединение базовых "виртуальных" классов, чем объединение всех в один инстанс. Соответственно, и вариант невиртуального наследования базового класса смысл имеет.

Поэтому представляется, что проблемы множественного наследования скорее вполне отражают "свойства реального мира", чем являются проявлением недостатков С++.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yms@lj
2004-05-29 01:11 (ссылка)
Поэтому представляется, что проблемы множественного наследования скорее вполне отражают "свойства реального мира"

Ага, и разница между простым и виртуальным наследованием тоже отражает "свойства реального мира", да?...
В любом случае, решения с дизайном, избегающим мн.н., выглядят более простыми и легче поддерживаемыми.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]yigal_s@lj
2004-05-29 07:25 (ссылка)
> Ага, и разница между простым и виртуальным наследованием тоже отражает "свойства реального мира", да?...

Виртуальное наследование - лишь способ решения проблем мульти-наследования. Посему, из того, что мульти-наследование отражает объективные реалии, не следует строго, что их же должно отражать виртуальное наследование.

> В любом случае, решения с дизайном, избегающим мн.н., выглядят более простыми и легче поддерживаемыми.

Да просто проблемы на самом деле не в мульти-наследовании, а в самой концепции implementation reusing. Представьте себе, что у вас есть имплементация Base (включающая в себя данные) и имплементации A и B, реюзающие её. Использовать они её могут через наследование класса Base, через включения в себя класса Base в качестве member-a, через включение в себя указателя на класс Base.

Ну а теперь представьте себе, что имплементация C реюзает имплементации A и B - опять же, каким угодно способом. В результате, как вы не крутитесь, вы получите примерно тот же уровень головной боли, что и с мульти-наследованием. И вам опять же придется предусматривать в имплементации A и B то, что данные имплементации Base могут быть слиты.

Всё это вполне реальные проблемы, а мульти-наследование при всех его отдельных недостатках в С++ - всего лишь эти проблемы отражает, но никак уж не порождает.

(Ответить) (Уровень выше)


(Читать комментарии) -