Questo è un esempio semplificato per illustrare la domanda:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Quindi B è responsabile dell'aggiornamento di una parte di C. Ho eseguito il codice tramite lint e si è lamentato del membro di riferimento: lint # 1725 . Si tratta di occuparsi della copia predefinita e delle assegnazioni, il che è abbastanza equo, ma anche la copia predefinita e l'assegnazione sono cattive con i puntatori, quindi c'è poco vantaggio lì.
Cerco sempre di utilizzare i riferimenti dove posso poiché i puntatori nudi introducono in modo incerto su chi è responsabile dell'eliminazione di quel puntatore. Preferisco incorporare gli oggetti in base al valore, ma se ho bisogno di un puntatore, utilizzo auto_ptr nei dati del membro della classe che possiede il puntatore e passo l'oggetto come riferimento.
In genere utilizzerei un puntatore nei dati dei membri solo quando il puntatore potrebbe essere nullo o potrebbe cambiare. Ci sono altri motivi per preferire i puntatori ai riferimenti per i membri dei dati?
È vero dire che un oggetto contenente un riferimento non dovrebbe essere assegnabile, poiché un riferimento non dovrebbe essere cambiato una volta inizializzato?