The wskaźnik zerowy pomysł jest kluczowy, ponieważ pomaga zapobiegać błędnym dostępom do pamięci, które mogą skutkować nieoczekiwanymi błędami w czasie wykonywania i awariami oprogramowania. Rozważmy scenariusz, w którym program próbuje odczytać lub zapisać adres pamięci, który albo nie został utworzony, albo został już cofnięty. Takie zachowanie jest niemożliwe do zdefiniowania w C++ i może spowodować poważne problemy w czasie wykonywania lub luki w zabezpieczeniach. Wskaźnik jest nieprawidłowy i nie należy go usuwać, jeśli łączy się z wartością pustą. Zakończenie programu, błędy segmentacji lub nieautoryzowany dostęp do pamięci to tylko kilka przykładów nieoczekiwanego zachowania, które może wystąpić podczas dereferencji wskaźnik zerowy .
Przykład nullptr w C++
#includeza pomocą przestrzeń nazw standardowe ;
int główny ( )
{
nullptr_t pi1, pi2 ;
Jeśli ( pi1 >= pi2 )
{
cout << „Wskaźnik 1 jest większy niż wartość wskaźnika 2” << koniec ;
}
w przeciwnym razie
{
cout << „Wskaźnik 2 jest większy niż wartość wskaźnika 1” << koniec ;
}
zwęglać * rozdz = pi1 ;
Jeśli ( rozdz == nullptr )
cout << „Zmienna wskaźnika ch ma wartość pustą z zerowym odwołaniem do adresu” << koniec ;
w przeciwnym razie
cout << „Zmienna wskaźnika ch nie jest wartością pustą, ma pewną wartość z odwołaniem do adresu” << koniec ;
powrót 0 ;
}
W powyższym kodzie używamy dwóch nullptrs i porównując je ze sobą. Następnie używamy wskaźnika znaku do sprawdzenia poprawności nullptr .
Wyjście
Powody, dla których warto używać nullptr w C++
Wskaźniki zerowe są często używane w programowaniu w C++ z kilku powodów:
1: Inicjowanie wskaźników
Kiedy deklarowana jest zmienna wskaźnika, zawsze powinna być inicjowana z prawidłową lokalizacją pamięci lub a wskaźnik zerowy . Dostęp do wskaźnika w dalszej części kodu pomaga zapobiegać niezadeklarowanemu zachowaniu.
2: Kod błędu
Funkcje mogą powrócić zerowe wskaźniki jako kody błędów, aby pokazać, że nie byli w stanie wykonać określonej akcji lub przydzielić pamięci.
3: Weryfikacja ważności wskaźnika
Weryfikacja poprawności wskaźnika przed dereferencją jest zawsze mądrym pomysłem. Zwiększa to niezawodność kodu i pomaga zapobiegać nieoczekiwanym błędom w czasie wykonywania.
4: Polimorfizm
W C++ wskaźniki klasy bazowej, które nie wskazują na żadne obiekty klas pochodnych, są reprezentowane przez zerowe wskaźniki . Jest to zwykle używane w programowaniu polimorficznym do obsługi funkcji zorientowanych obiektowo, takich jak dziedziczenie i funkcje wirtualne.
Wskaźniki zerowe nie należy mylić z wiszącymi lub niezainicjowanymi wskaźnikami, należy o tym pamiętać. Niezainicjowane wskaźniki mogą wskazywać dowolny adres w pamięci, ponieważ nie zostały zainicjowane wartością. Z drugiej strony wiszące wskaźniki to te, które odnoszą się do nieprawidłowych lub już cofniętych obszarów pamięci. W programowaniu w C++ zwisające wskaźniki i niezainicjowane wskaźniki mogą potencjalnie powodować problemy w czasie wykonywania.
Zalety używania nullptr w C++
Korzystanie z a nullptr .
1: Bezpieczeństwo
Ponieważ nullptr jest bardziej bezpieczny dla typów niż NULL, należy go zamiast tego użyć. Podczas gdy NULL jest po prostu definiowane jako stała całkowita o wartości zero, nullptr jest literałem wskaźnika, który można przekształcić tylko w typ wskaźnika, a nie w żaden inny typ.
2: Użyteczność
W programowaniu w C++ istnieje wiele sposobów korzystania z wskaźnik zerowy . Inicjowanie wskaźników, wysyłanie parametrów do wywołań funkcji lub zwracanie wartości wskaźników z funkcji, jako przykłady, to tylko niektóre z jego możliwych zastosowań. Może być również używany do określenia, czy wywołanie funkcji lub akcja dała prawidłową wartość wskaźnika.
3: Dynamiczna alokacja pamięci
Dynamiczna alokacja pamięci jest jednym z najpopularniejszych zastosowań a wskaźnik zerowy . Używając nowego operatora w C++, realizowana jest dynamiczna alokacja pamięci. Po wywołaniu nowej metody zwracany jest wskaźnik do świeżo wygenerowanego obiektu. Jeśli alokacja nie powiedzie się z jakiegokolwiek powodu, takiego jak brak wystarczającej ilości pamięci, zwracana jest wartość NULL. W związku z tym ważne jest, aby zweryfikować zwracaną wartość przed użyciem wskaźnika, aby upewnić się, że alokacja się powiodła.
Wniosek
The wskaźnik zerowy jest kluczową ideą w programowaniu w C++, która daje mechanizm pokazujący, że brakuje adresu w pamięci. Deweloperzy mogą zapobiegać awariom oprogramowania i innym problemom, stosując zerowe wskaźniki aby upewnić się, że ich aplikacje nie próbują uzyskać dostępu do błędnych adresów pamięci. Dlatego ważne jest, aby programiści zrozumieli, jak to zrobić zerowe wskaźniki powinny być wykorzystywane i robić to skutecznie w swoich programach.