Это упрощенный пример, иллюстрирующий вопрос:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Итак, B отвечает за обновление части C. Я запустил код через lint, и он пожаловался на элемент ссылки: lint # 1725 . Здесь говорится о заботе о копировании и присваиваниях по умолчанию, что достаточно справедливо, но копирование и присваивание по умолчанию также плохо работают с указателями, поэтому здесь мало преимуществ.
Я всегда стараюсь использовать ссылки там, где это возможно, поскольку голые указатели неуверенно определяют, кто несет ответственность за удаление этого указателя. Я предпочитаю встраивать объекты по значению, но если мне нужен указатель, я использую auto_ptr в данных-членах класса, которому принадлежит указатель, и передаю объект в качестве ссылки.
Обычно я бы использовал указатель в данных члена только тогда, когда указатель мог быть нулевым или мог измениться. Есть ли другие причины предпочесть указатели ссылкам на элементы данных?
Верно ли сказать, что объект, содержащий ссылку, не должен быть назначен, поскольку ссылка не должна изменяться после инициализации?