Referencja a wskaźnik.

0

Czym się różni przesyłanie obiektu przez referencję, a przez wskaźnik?

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1