Uważam, że jest to niewielka pomoc, ponieważ z mojego doświadczenia wynika, że kiedy ludzie uzyskują dostęp do zwolnionej alokacji pamięci, prawie zawsze dzieje się tak, ponieważ mają gdzieś inny wskaźnik do tego. A potem jest to sprzeczne z innym osobistym standardem kodowania, który brzmi „Unikaj niepotrzebnego bałaganu”, więc nie robię tego, ponieważ myślę, że rzadko pomaga i sprawia, że kod jest nieco mniej czytelny.
Jednak - nie ustawię zmiennej na null, jeśli wskaźnik nie ma być ponownie użyty, ale często projekt wyższego poziomu daje mi powód, aby i tak ustawić ją na null. Na przykład jeśli wskaźnik jest członkiem klasy i usunąłem to, na co wskazuje, wówczas "kontrakt", jeśli podoba ci się klasa, jest taki, że ten element członkowski wskaże coś ważnego w dowolnym momencie, więc musi być ustawiony na null z tego powodu. Małe rozróżnienie, ale myślę, że ważne.
W języku c ++ ważne jest, aby zawsze myśleć, kto jest właścicielem tych danych, gdy przydzielasz trochę pamięci (chyba że używasz inteligentnych wskaźników, ale nawet wtedy wymagana jest pewna myśl). Ten proces zwykle prowadzi do tego, że wskaźniki na ogół należą do jakiejś klasy i generalnie chcesz, aby klasa była w stanie przez cały czas, a najłatwiejszym sposobem jest ustawienie zmiennej składowej na NULL, aby wskazać, że wskazuje do niczego teraz.
Wspólny wzór jest ustawienie wszystkich wskazówek państw NULL w konstruktorze i mieć wywołanie destruktora usuwania na wszelkie wskaźniki do danych, że projekt mówi, że klasa jest właścicielem . Oczywiście w tym przypadku musisz ustawić wskaźnik na NULL, gdy usuniesz coś, aby wskazać, że wcześniej nie jesteś właścicielem żadnych danych.
Podsumowując, tak, często ustawiam wskaźnik na NULL po usunięciu czegoś, ale jest to część większego projektu i przemyśleń na temat tego, kto jest właścicielem danych, a nie ślepo przestrzeganie standardowej reguły kodowania. Nie zrobiłbym tego na twoim przykładzie, ponieważ myślę, że nie ma z tego żadnej korzyści i dodaje to „bałaganu”, który z mojego doświadczenia jest tak samo odpowiedzialny za błędy i zły kod, jak tego typu rzeczy.
ptr == NULL
przed zrobieniem cokolwiek z tym. Jeśli nie anulujesz swoich bezpłatnych wskaźników, otrzymasz,ptr != NULL
ale nadal nieużywalny wskaźnik.