2010-10-06 5 views
3

Недавно коллега спросил мое мнение об использовании спецификаций исключений в коде C++, и я смог извлечь эту статью Herb Sutter: A Pragmatic Look at Exception Specifications. Статья, как и большинство из Herb Sutter, является учебным чтением, но короткий ответ - «не делайте этого».C++ Misfeatures, основанный на опыте

В сводке он ссылается на стихотворение под названием «Twas the Night Before Implementation», в котором, по сути, комитет по стандартизации склоняется к требованиям пользователей добавить функцию в последнюю минуту, только чтобы обнаружить, что в то время как он делает то, о чем просили, он на самом деле не делает то, что хотел. И да, спецификации исключений соответствуют этому счету. По его словам, «В то время эта функция казалась хорошей идеей, и это то, о чем некоторые просили». Если этого недостаточно, он затем посещает «экспорт» с такими же грустными результатами.

Итак, вопрос в том, что «функция» C++ оказывается сломанной и не должна использоваться, если вы не желаете испытывать слезы. Это может быть жертвой субъективных пререканий, но я надеюсь, что люди приведут конкретный опыт, когда функция была развернута только для того, чтобы вызвать измеримые проблемы. Еще лучше было бы цитирование статей ведущими огнями, такими как Саттер (или кто-то, кто был глубоко вовлечен в Стандарт), предупреждая людей о возможности.

+1

Ну, я могу думать о «множественном наследовании»: есть ТОНН источников, утверждая, что этого следует избегать. Однако я нашел это очень полезным, когда дело доходит до метапрограммирования (см. Известный пример GenScatteredHierarchy ...) – Emiliano

+1

Это опрос, он субъективен и спрашивает, что * плохо * о языке. Средний период полувыведения до закрытия составляет около 5 минут. –

+0

Я согласен, что это может привлечь такой комментарий. Тем не менее, я думал, что я был совершенно ясен. Пример был одним из ведущих индикаторов, пересматривающих функцию через несколько лет после того, как он был принят, и объяснил, почему было неправильно добавлять эту функцию на основе * опыта *. Вот такая обратная связь, которую я ищу. Жаль, что его сбили. –

ответ

5

Если вы включили также библиотечные функции: auto_ptr. Он имеет свои применения, но также легко злоупотреблять. Следующий стандарт C++ обесценит их также в пользу более безопасного и гибкого std :: unique_ptr.