Voici un exemple simplifié pour illustrer la question:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Donc B est responsable de la mise à jour d'une partie de C. J'ai fait passer le code à travers lint et il s'est plaint du membre de référence: lint # 1725 . Cela parle de prendre soin de la copie et des affectations par défaut, ce qui est assez juste, mais la copie et l'affectation par défaut sont également mauvaises avec les pointeurs, donc il n'y a que peu d'avantages.
J'essaie toujours d'utiliser des références là où je peux, car les pointeurs nus introduisent une incertitude quant à savoir qui est responsable de la suppression de ce pointeur. Je préfère incorporer des objets par valeur, mais si j'ai besoin d'un pointeur, j'utilise auto_ptr dans les données membres de la classe qui possède le pointeur, et je passe l'objet comme référence.
Je n'utiliserais généralement un pointeur dans les données des membres que lorsque le pointeur pourrait être nul ou changer. Y a-t-il d'autres raisons de préférer les pointeurs aux références pour les membres de données?
Est-il vrai de dire qu'un objet contenant une référence ne doit pas être assignable, puisqu'une référence ne doit pas être modifiée une fois initialisée?