Czym się różni przesyłanie obiektu przez referencję, a przez wskaźnik?
0
1
Nazwą
0
No nie tylko, a przynajmniej tak mi się wydaje.
1
W praktyce niczym (tj. wygenerowany assembly będzie zazwyczaj identyczny, aczkolwiek nie jest to zdefiniowane przez standard). Jeśli chodzi natomiast o C++ to różnice są takie:
- referencja musi być zainicjalizowana, a wskaźnik może być na przykład nullem lub być niezainicjalizowany (wskazuje wówczas na jakiś nieokreślony adres)
- bez różnych hacków (i UB) nie da się zmienić adresu, do którego odnosi się referencja (jest czymś w rodzaju
typ * const
) - W uproszczeniu referencja to jest alias na inny obiekt, tzn. traktuj referencję, jakby była tym właśnie obiektem.
- wskaźnik natomiast to zmienna przechowująca adres pamięci
- nie można utworzyć referencji do referencji, natomiast można wskaźnik do wskaźnika
Ogólnie zazwyczaj referencje są bezpieczniejsze i jeśli nie musisz miec wskaźnika (tzn. chcesz aby mógł wskazywać na różne obiekty lub mógł być nullem), to używaj referencji.
0
Operując na referencji zawsze modyfikujesz zmienną pod danym adresem, nie można zmieniać tego adresu.
Wskaźnik można np inkrementować by wskazać na zmienną pod kolejnym adresem w pamięci.