LINUX.ORG.RU

История изменений

Исправление hatred, (текущая версия) :

само отвалится в нужных местах

Почему оно отваливается там? Может такая необходимость возникнуть в пользовательском классе? А применение ссылки лишь инструмент, ровно как и явное удаление методов.

куча говна

«слова не мальчика, но мужа!»

«Note that using a reference member is almost always wrong»

«almost always wrong»

core guidelines

к ним приложили руки пусть и грамотные люди, но в большей части те же, кто пилил gsl, тот же Саттер (раньше как раз в MS работал). Так что догматично я их тоже не воспринимаю. Как хорошие рекомендации в общем, особенно, если нет понимания механизмов - очень даже. Но слепо следовать всегда - простите.

По ссылкам там не дано разъяснения и раньше в этой фразе фигурировала ещё и отсылка к auto_ptr. Если проблемы последнего обсосали везде, где только можно и ровно по той же причине задепрекйтили, то по ссылке - туман. Я вижу ровно две причины, по которой имеет смысл отказываться:

  • Класс не владеет ресурсом - опасность висячей ссылки. Невладеющий указатель тут не спасёт. И ссылка здесь воспринимается как конракт на уровне языка дающий гарантии пользователю: объект живёт, пока твой класс живёт, он точно не nullptr и без дополнительный аннотаций, типа not_null.
  • Отваливается копирование и конструктор по умолчанию. Но это далеко не всегда проблема. И иногда и желаемое поведение.

Ну и от foo& _member в плане исчезновения operator= проблема ровно такая же, как от const foo _member. И развивая твою отсылку на Note, есть более детальное правило:

Но тут уже более конкретно: «in a copyable or movable type». Ну а если им нет необходимости такими быть?

Да, Страуструп предложил развернуть этот нотайс до правила, на что Саттер предложил уточнить вышеупомянутый C.12, но за 4 года так и не сподобились: видать очень нужно и проблема очень острая.

Ещё есть и такая дискуссия конкретно по этому нотайсу и вот эта позиция точно ложится на мои высказывания выше. Вообще, там есть и про std::reference_wrapper и чисто косметические неудобства типа вызова .get() на нём, но всё сводится к акценту на almost и пожелания конкретики. А общая канва: под задачу инструмент. Дискуссии 5 лет как, а метры не удосужились конкретики привести.

@hobbit, прости, что засираем тему :))))

Исходная версия hatred, :

само отвалится в нужных местах

Почему оно отваливается там? Может такая необходимость возникнуть в пользовательском классе? А применение ссылки лишь инструмент, ровно как и явное удаление методов.

куча говна

«слова не мальчика, но мужа!»

«Note that using a reference member is almost always wrong»

«almost always wrong»

core guidelines

к ним приложили руки пусть и грамотные люди, но в большей части те же, кто пилил gsl, тот же Саттер (раньше как раз в MS работал). Так что догматично я их тоже не воспринимаю. Как хорошие рекомендации в общем, особенно, если нет понимания механизмов - очень даже. Но слепо следовать всегда - простите.

По ссылкам там не дано разъяснения и раньше в этой фразе фигурировала ещё и отсылка к auto_ptr. Если проблемы последнего обсосали везде, где только можно и ровно по той же причине задепрекйтили, то по ссылке - туман. Я вижу ровно две причины, по которой имеет смысл отказываться:

  • Класс не владеет ресурсом - опасность висячей ссылки. Невладеющий указатель тут не спасёт. И ссылка здесь воспринимается как конракт на уровне языка дающий гарантии пользователю: объект живёт, пока твой класс живёт, он точно не nullptr и без дополнительный аннотаций, типа not_null.
  • Отваливается копирование и конструктор по умолчанию. Но это далеко не всегда проблема. И иногда и желаемое поведение.

Ну и от foo& _member в плане исчезновения operator= проблема ровно такая же, как от const foo _member. И развивая твою отсылку на Note, есть более детальное правило:

Но тут уже более конкретно: «in a copyable or movable type». Ну а если им нет необходимости такими быть?

Да, Страуструп предложил развернуть этот нотайс до правила, на что Саттер предложил уточнить вышеупомянутый C.12, но за 4 года так и не сподобились: видать очень нужно и проблема очень острая.

Ещё есть и такая дискуссия конкретно по этому нотайсу и вот эта позиция точно ложится на мои высказывания выше. Вообще, там есть и про std::reference_wrapper и чисто косметические неудобства типа вызова .get() на нём, но всё сводится к акценту на almost и пожелания конкретики. А общая канва: под задачу инструмент. Дискуссии 5 лет как, а метры не удосужились конкретики привести.