これは質問を説明するための単純化された例です:
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を使用し、オブジェクトを参照として渡します。
通常、メンバーデータでポインターを使用するのは、ポインターがnullになるか変更される可能性がある場合のみです。データメンバーの参照よりもポインターを優先する他の理由はありますか?
一度初期化されたリファレンスは変更されるべきではないので、リファレンスを含むオブジェクトは割り当て可能であるべきではないというのは本当ですか?