Oto uproszczony przykład ilustrujący pytanie:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Więc B jest odpowiedzialny za aktualizację części C. Przepuściłem kod przez lint i narzekał o elemencie referencyjnym: lint # 1725 . To mówi o dbaniu o domyślną kopię i przypisania, co jest wystarczająco uczciwe, ale domyślna kopia i przypisanie są również złe w przypadku wskaźników, więc nie ma z tego żadnej korzyści.
Zawsze staram się używać odnośników tam, gdzie mogę, ponieważ nagie wskaźniki wprowadzają niepewnie, kto jest odpowiedzialny za usunięcie tego wskaźnika. Wolę osadzać obiekty według wartości, ale jeśli potrzebuję wskaźnika, używam auto_ptr w danych składowych klasy, która jest właścicielem wskaźnika, i przekazuję obiekt jako odniesienie.
Generalnie użyłbym wskaźnika w danych składowych tylko wtedy, gdy wskaźnik mógłby być zerowy lub mógłby się zmienić. Czy są jakieś inne powody, aby preferować wskaźniki zamiast referencji dla członków danych?
Czy prawdą jest, że obiekt zawierający odniesienie nie powinien być przypisywany, ponieważ odwołanie nie powinno być zmieniane po zainicjowaniu?