nullptr en veiligheid rond null-pointers
Gebruik nullptr in plaats van NULL of 0 en voorkom dereferenties van null-pointers
nullptr en veiligheid rond null-pointers is een gratis C++ Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C++ Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C++ Academy bevat in totaal 4 lessen.
Wat is een nullpointer?
Een nullpointer is een speciale waarde die naar "niets" wijst. Het derefereren ervan is ongedefinieerd gedrag — meestal crasht het programma met een segmentatiefout.
nullptr in modern C++
Sinds C++11 staat het sleutelwoord nullptr voor een getypeerde nullpointerliteral. Gebruik dit liever dan NULL of 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalWaarom nullptr?
NULL is slechts een macro voor 0. Dit kan de overloadresolutie tussen int en int* in de war brengen. nullptr heeft het unieke type std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctControleren op null
Pointers worden impliciet naar bool geconverteerd: niet-null is waar, null is onwaar.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Altijd initialiseren
Niet-geïnitialiseerde pointers bevatten rommel en doen alsof ze ergens naartoe wijzen. Initialiseer ze altijd, ook als dat alleen met nullptr is.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODNull derefereren
Lezen of schrijven via een nullpointer is ongedefinieerd gedrag. Op de meeste desktopsystemen leidt dit tot een segmentatiefout. Op embedded apparaten kan het geheugen stilzwijgend beschadigd raken.
Defensieve controles
Controleer dit voordat je een pointer derefereert in openbare API's of wanneer de aanroeper null kan doorgeven.
void process(int* data) {
if (!data) return;
*data *= 2;
}Verwijzingen in plaats van pointers
Als null nooit betekenisvol is, gebruik je een verwijzingsparameter. De compiler garandeert dat de verwijzing aan iets wordt gebonden.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional voor optionele waarden
C++17 voegde std::optional<T> toe voor de semantiek van "misschien een waarde" — duidelijker dan een nullable pointer in contexten zonder geheugentoewijzing.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Slimme pointers en null
std::unique_ptr en std::shared_ptr kunnen ook null zijn. Ze worden voor controles naar bool geconverteerd en met = nullptr gereset.
Valkuil: bungelen na delete
Na delete p bevat de pointer nog steeds het oude adres. Reset hem: p = nullptr;. Slimme pointers doen dit automatisch.
Korte controle
Welke nullpointerliteral moet je in modern C++ gebruiken?
Samenvatting
Gebruik nullptr voor nullpointerwaarden. Initialiseer pointers altijd. Controleer ze voordat je ze derefereert of gebruik, beter nog, verwijzingen en std::optional wanneer null nooit geldig is.
Leer C++ met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “nullptr en veiligheid rond null-pointers” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad C++ Academy, waaronder “nullptr en veiligheid rond null-pointers”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus C++ Academy bevat in totaal 4 lessen.
Wat leer ik in “nullptr en veiligheid rond null-pointers”?
Gebruik nullptr in plaats van NULL of 0 en voorkom dereferenties van null-pointers Je oefent met C++ Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met C++ Academy te beginnen?
Ervaring vooraf is niet nodig. C++ Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “nullptr en veiligheid rond null-pointers”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over C++ Academy?
Ja. Elke les over C++ Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Raw pointers en de adresoperator
- Derefereren en pointeraritmetiek
- nullptr en veiligheid rond null-pointers
- Wanneer u pointers versus references gebruikt