C++ Academy · Lektion

Hvorfor smart pointers erstatter rå new og delete

Forstå RAII, og hvorfor ejerskab af rå pointere sjældent er korrekt i moderne C++

Lektion 1 af 413 trin

Hvorfor smart pointers erstatter rå new og delete er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 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.

Rå new og delete

Arven fra C: new T allokerer en T på heapen, og delete frigiver den. Du skal matche hvert new med præcis ét delete – ellers opstår der en hukommelseslækage eller et nedbrud.

Widget* w = new Widget();
// ... use w ...
delete w;        // forget this and you leak

Hvad der går galt

Almindelige fejl:

  • Glemt delete – hukommelseslækage
  • Dobbelte delete – udefineret adfærd
  • Undtagelse mellem new og delete – lækage
  • Returnering af en rå pointer med uklart ejerskab

RAII kommer til undsætning

Ressourceanskaffelse er initialisering: Knyt en ressources levetid til levetiden for et objekt på stacken. Destruktoren frigiver ressourcen, selv hvis der kastes en undtagelse.

Ideen med en smart pointer

En smart pointer er en lille RAII-wrapper omkring en rå pointer. Dens destruktor kalder delete. Du glemmer aldrig at frigive ressourcen.

De tre smart pointer-typer

Standardbibliotekets smart pointer-typer i <memory>:

  • std::unique_ptr<T> – ene-ejerskab
  • std::shared_ptr<T> – delt ejerskab med referencetælling
  • std::weak_ptr<T> – ikke-ejende observatør af en shared_ptr

Smart pointere er billige

unique_ptr har ingen ekstra omkostning og har samme størrelse og hastighed som en rå pointer. shared_ptr har en lille omkostning til atomær referencetælling.

Ikke mere manuel delete

Med smart pointere skriver du næsten aldrig delete. Destruktoren klarer det.

#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyed

Smart pointere og undtagelser

Hvis der kastes en undtagelse midt i en funktion, destrueres lokale variable i omvendt rækkefølge. Smart pointere frigiver deres ressourcer automatisk, mens rå pointere lækker.

Ejerskab i typen

Smart pointer-typen beskriver nu ejerskabet. Når du læser en funktionssignatur, kan du se, hvem der ejer objektet.

// I take ownership
void consume(std::unique_ptr<Widget> w);

// I look but do not own
void inspect(const Widget& w);

Rå pointere findes stadig

Brug rå pointere eller referencer til ikke-ejende adgang. De kommunikerer: "Jeg låner, jeg ejer ikke."

Erstatning af new med make-funktioner

Foretræk std::make_unique (C++14) og std::make_shared (C++11). De er sikre ved undtagelser og en smule mere effektive end at kalde new direkte.

auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");

Hurtigt tjek

Hvad er den vigtigste grund til at bruge std::unique_ptr i stedet for et råt new/delete-par?

Opsummering

Rå new/delete er fejlbehæftede. Smart pointere indkapsler heap-allokerede objekter i RAII-håndtag, der frigiver dem automatisk. Foretræk std::make_unique og std::make_shared af hensyn til sikkerhed og ydeevne.

Gratis at komme i gang

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 “Hvorfor smart pointers erstatter rå new og delete” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Hvorfor smart pointers erstatter rå new og delete”, 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 “Hvorfor smart pointers erstatter rå new og delete”?

Forstå RAII, og hvorfor ejerskab af rå pointere sjældent er korrekt i moderne C++ 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 1 af 4.

Hvor lang tid tager lektionen “Hvorfor smart pointers erstatter rå new og delete”?

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

  1. Hvorfor smart pointers erstatter rå new og delete
  2. unique_ptr – eksklusivt ejerskab
  3. shared_ptr og weak_ptr – delt ejerskab
  4. Brugerdefinerede deleters og make-funktioner
← Tilbage til C++ Academy