Це спрощений приклад для ілюстрації питання:
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 в даних членів класу, що володіє вказівником, і передаю об'єкт навколо як орієнтир.
Як правило, вказівник у даних членів використовую лише тоді, коли вказівник може бути нульовим або мінятись. Чи є інші причини віддати перевагу покажчикам над посиланнями для членів даних?
Чи правда сказати, що об'єкт, що містить посилання, не повинен бути присвоєний, оскільки посилання не слід змінювати, коли він ініціалізується?