Kiedy używać wskaźników, a kiedy referencji
Wybieraj między wskaźnikami a referencjami na podstawie opcjonalności i semantyki własności
Kiedy używać wskaźników, a kiedy referencji to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Różne narzędzia do różnych zadań
Referencje i wskaźniki pozwalają uzyskać pośredni dostęp do innego obiektu, ale mają różne znaczenie. Każdego z tych mechanizmów należy używać tam, gdzie sprawdza się najlepiej.
Referencje dla wymaganych obiektów
Referencja nie może mieć wartości null i nie można jej ponownie powiązać z innym obiektem. Parametru referencyjnego należy użyć, gdy funkcja zawsze potrzebuje rzeczywistego obiektu.
void render(const Image& img); // must have an imageWskaźniki dla opcjonalnych obiektów
Wskaźnik może mieć wartość null. Należy użyć wskaźnika, gdy argument jest rzeczywiście opcjonalny.
void render(const Image* img); // nullptr means "skip"Wskaźniki, gdy zmienia się obiekt docelowy
Wskaźniki można przekierowywać na inne obiekty. Należy ich używać, gdy cel pośredniego dostępu zmienia się w trakcie algorytmu — na przykład w przypadku przesuwanego kursora lub bieżącego węzła.
Node* current = head;
while (current) {
process(current);
current = current->next;
}Referencje jako elementy kontenerów
Nie można utworzyć std::vector<T&>. Należy użyć std::vector<std::reference_wrapper<T>> albo przechowywać wskaźniki.
Zwracanie referencji
Referencję należy zwracać, gdy wynik będzie istniał dłużej niż wywołanie funkcji i wywołujący może użyć go bezpośrednio (w przypadku składowych lub elementów kontenera).
std::string& Person::name() { return name_; }Zwracanie wskaźników
Wskaźnik należy zwracać, gdy funkcja może nie zwrócić wyniku lub gdy własność obiektu jest niejasna. We współczesnym kodzie należy preferować std::optional lub inteligentne wskaźniki.
Składowe klasy
Przechowywanie referencji jako składowej wiąże ją z obiektem docelowym na cały czas życia obiektu — i uniemożliwia przypisanie przez kopiowanie. Składowe będące wskaźnikami są bardziej elastyczne, ale wymagają sprawdzania wartości null.
Polimorfizm
Do polimorfizmu można używać zarówno wskaźników, jak i referencji. W kontenerach należy przechowywać wskaźniki do klas bazowych (vector nie może przechowywać referencji); parametrów należy używać jako referencji, gdy wartość null jest niedozwolona.
Inteligentne wskaźniki do zarządzania własnością
Surowych wskaźników należy używać wyłącznie do dostępu bez przejmowania własności. Za własność powinny odpowiadać std::unique_ptr lub std::shared_ptr.
Szybki przewodnik wyboru
Szybki przewodnik:
- zawsze prawidłowy obiekt → referencja
- może nie istnieć → wskaźnik lub
std::optional - zmienny cel pośredniego dostępu → wskaźnik
- jest właścicielem pamięci → inteligentny wskaźnik
- w kontenerze → wskaźnik (vector przechowujący referencje jest kłopotliwy)
Szybkie sprawdzenie
Jaki jest najlepszy typ parametru funkcji, która wymaga obiektu niebędącego nullem?
Podsumowanie
Referencji należy używać dla wymaganych, stałych obiektów docelowych, a wskaźników dla obiektów opcjonalnych lub zmiennych. W przypadku własności należy preferować inteligentne wskaźniki. Kontenery zwykle wymagają wskaźników, a nie referencji.
Ucz się C++ dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „Kiedy używać wskaźników, a kiedy referencji” jest bezpłatna?
Tak — pełny tekst „Kiedy używać wskaźników, a kiedy referencji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Kiedy używać wskaźników, a kiedy referencji”?
Wybieraj między wskaźnikami a referencjami na podstawie opcjonalności i semantyki własności Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Kiedy używać wskaźników, a kiedy referencji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Surowe wskaźniki i operator pobrania adresu
- Dereferencjonowanie i arytmetyka wskaźników
- nullptr i bezpieczeństwo wskaźników null
- Kiedy używać wskaźników, a kiedy referencji