nullptr og sikkerhed ved null-pointere
Brug nullptr i stedet for NULL eller 0, og beskyt mod dereferering af null-pointere
nullptr og sikkerhed ved null-pointere er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad er en null-pointer?
En null-pointer er en særlig værdi, der peger på "ingenting". Det er udefineret at dereferere den — normalt medfører det et nedbrud med en segmentation fault.
nullptr i moderne C++
Siden C++11 repræsenterer nøgleordet nullptr en typet null-pointerliteral. Foretræk den frem for NULL eller 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalHvorfor nullptr?
NULL er blot en makro for 0. Den kan forvirre overload-opløsningen mellem int og int*. nullptr har den unikke type std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctTjekke for null
Pointere konverteres implicit til bool: en pointer, der ikke er null, er true, og en null-pointer er false.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Initialisér altid
Uinitialiserede pointere indeholder skrald og lader som om, de peger et sted hen. Initialisér dem altid, også selv om det kun er til nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODDereferering af null
Det er udefineret at læse eller skrive via en null-pointer. På de fleste desktop-systemer medfører det en segfault. På indlejrede enheder kan det ødelægge hukommelsen uden synlige tegn.
Defensive tjek
Tjek før dereferering i offentlige API'er, eller når den kaldende kode kan sende null.
void process(int* data) {
if (!data) return;
*data *= 2;
}Referencer i stedet for pointere
Hvis null aldrig har en meningsfuld betydning, skal du bruge en referenceparameter. Compileren garanterer, at referencen er bundet til noget.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional til valgfrie værdier
C++17 tilføjede std::optional<T> til semantik for "måske en værdi" — det er tydeligere end en nullbar pointer i sammenhænge uden hukommelsesallokering.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Smart pointers og null
std::unique_ptr og std::shared_ptr kan også være null. De konverteres til bool ved tjek og nulstilles med = nullptr.
Faldgrube: hængende pointer efter delete
Efter delete p indeholder pointeren stadig den gamle adresse. Nulstil den: p = nullptr;. Smart pointers gør det automatisk.
Hurtigt tjek
Hvilken null-pointerliteral skal du bruge i moderne C++?
Opsamling
Brug nullptr til null-pointerværdier. Initialisér altid pointere. Tjek før dereferering, eller brug endnu bedre referencer og std::optional, når null aldrig er gyldig.
Lær C++ med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “nullptr og sikkerhed ved null-pointere” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “nullptr og sikkerhed ved null-pointere”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “nullptr og sikkerhed ved null-pointere”?
Brug nullptr i stedet for NULL eller 0, og beskyt mod dereferering af null-pointere Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C++ Academy?
Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “nullptr og sikkerhed ved null-pointere”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C++ Academy-lektion?
Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Rå pointere og adresseoperatoren
- Dereferering og pointeraritmetik
- nullptr og sikkerhed ved null-pointere
- Hvornår bruges pointere kontra referencer