どちらをいつ使用するかについてのすべての考慮事項はさておき、ポインタと参照のセマンティクスについてはまだわかりません。
今のところ、参照は本質的には宣言時に初期化する必要のあるポインターであり、それ以降は他のものを指すことができないという印象を受けています。言い換えれば、それらはType* const
(ではなく)のようなものであるか、またはそれらを再装着Type const*
することはできません。これは基本的に、そのオブジェクトの「新しい名前」になります。コンパイラがポインタを使って実際に参照を実装する必要はないと聞いたのですが、目に見える振る舞いに関しては、このように考えることができると思います。
しかし、なぜあなたはこのようなことをすることができないのですか?
int& foo = new int;
動的メモリへの参照を作成したいと思います。これはコンパイルされません。エラーが発生します
error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int*'
それは私には理にかなっています。new演算子は、指定されたタイプのポインタをOSのメモリアドレスに返すようです。動的に割り当てられます。
では、動的メモリへの「参照」を作成するにはどうすればよいですか?
編集:C++の参照とポインタの違いを正確に説明するリソースへのリンクをいただければ幸いです。