Este é um exemplo simplificado para ilustrar a pergunta:
class A {};
class B
{
B(A& a) : a(a) {}
A& a;
};
class C
{
C() : b(a) {}
A a;
B b;
};
Portanto, B é responsável por atualizar uma parte do C. Executei o código através do lint e ele zombou do membro de referência: lint # 1725 . Isso fala sobre cuidar das cópias e atribuições padrão o que é justo o suficiente, mas a cópia e a atribuição padrão também são ruins para os ponteiros, portanto, há pouca vantagem nisso.
Eu sempre tento usar referências onde posso, pois ponteiros nus apresentam incertezas sobre quem é responsável por excluir esse ponteiro. Prefiro incorporar objetos por valor, mas se precisar de um ponteiro, uso auto_ptr nos dados dos membros da classe que possui o ponteiro e transmito o objeto como referência.
Geralmente, eu usaria apenas um ponteiro nos dados dos membros quando o ponteiro pudesse ser nulo ou mudar. Existem outros motivos para preferir ponteiros do que referências para membros de dados?
É verdade que um objeto que contém uma referência não deve ser atribuído, pois uma referência não deve ser alterada depois de inicializada?