При выборе я предпочитаю использовать максимально ограниченный тип.
Поэтому, если мне не нужно поддерживать нулевые объекты, я бы предпочел объявить
Foo& m_foo;
член, а не
Foo*const m_foo;
member, поскольку в предыдущей декларации задокументирован тот факт, что m_foo
не может быть нулевым.
В краткосрочной перспективе преимущество не так велико. Но в долгосрочной перспективе, когда вы возвращаетесь к старому коду, мгновенная уверенность в том, что вам не нужно беспокоиться о том, что m_foo
будет нулевым, весьма ценна.
Существуют и другие способы достижения аналогичного эффекта. Один проект, над которым я работал, где они не понимали ссылок, требовал суффикса любых потенциально нулевых указателей «00», например, m_foo00
. Интересно, что boost::optional
кажется ссылками на поддержку , хотя я не пробовал. Или вы можете засорять свой код утверждениями.