nullptr och säkerhet för nullpekare
Använd nullptr i stället för NULL eller 0 och skydda mot dereferering av nullpekare
nullptr och säkerhet för nullpekare är en gratis lektion i C++ Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för C++ Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C++ Academy innehåller totalt 4 lektioner.
Vad är en nullpekare?
En nullpekare är ett specialvärde som pekar på ”ingenting”. Att dereferera den är odefinierat beteende – vanligtvis uppstår ett segmenteringsfel.
nullptr i modern C++
Sedan C++11 representerar nyckelordet nullptr en typad nullpekar-literal. Föredra den framför NULL eller 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalVarför nullptr?
NULL är bara ett makro för 0. Det kan försvåra överlagringsupplösningen mellan int och int*. nullptr har den unika typen std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctKontrollera om pekaren är null
Pekare konverteras implicit till bool: en pekare som inte är null blir true och en nullpekare blir false.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Initiera alltid
Oinitierade pekare innehåller skräpdata och låtsas peka någonstans. Initiera dem alltid, även om det bara är till nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODDereferera null
Att läsa eller skriva via en nullpekare är odefinierat beteende. På de flesta skrivbordssystem uppstår ett segmenteringsfel. På inbyggda system kan minnet skadas obemärkt.
Defensiva kontroller
Kontrollera pekaren innan ni derefererar den i publika API:er eller när anroparen kan skicka in null.
void process(int* data) {
if (!data) return;
*data *= 2;
}Referenser i stället för pekare
Om null aldrig är ett meningsfullt värde ska ni använda en referensparameter. Kompilatorn garanterar att referensen binds till något.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional för valfria värden
C++17 lade till std::optional<T> för semantik av typen ”kanske ett värde” – tydligare än en nullable pekare i sammanhang som inte gäller allokering.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Smarta pekare och null
std::unique_ptr och std::shared_ptr kan också vara null. De konverteras till bool vid kontroller och återställs med = nullptr.
Fallgrop: hängande pekare efter delete
Efter delete p innehåller pekaren fortfarande den gamla adressen. Återställ den: p = nullptr;. Smarta pekare gör detta automatiskt.
Snabbkontroll
Vilken nullpekar-literal ska ni använda i modern C++?
Sammanfattning
Använd nullptr för nullpekarvärden. Initiera alltid pekare. Kontrollera dem innan ni derefererar dem eller använd, ännu hellre, referenser och std::optional när null aldrig är giltigt.
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”nullptr och säkerhet för nullpekare” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen C++ Academy, inklusive ”nullptr och säkerhet för nullpekare”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i C++ Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”nullptr och säkerhet för nullpekare”?
Använd nullptr i stället för NULL eller 0 och skydda mot dereferering av nullpekare Ni övar på C++ Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C++ Academy?
Du behöver inga förkunskaper. Utbildningen i C++ Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”nullptr och säkerhet för nullpekare”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C++ Academy-lektionen?
Ja. Varje C++ Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Råa pekare och address-of-operatorn
- Dereferering och pekararitmetik
- nullptr och säkerhet för nullpekare
- När ska pekare respektive referenser användas