Slet (C++)

delete er et nøgleord for programmeringssproget C++ , som oprindeligt blev introduceret i standarden for at håndtere frigivelsen af ​​hukommelse tildelt af new. I den moderniserede C++11 -standard blev nøgleordet deleteogså tildelt rollen som en adgangsspecifikation for særlige klassemedlemsfunktioner , hvilket forbyder deres brug [1] .

Hukommelsesstyringsoperation

I programmeringssproget C++ returnerer operatøren deleteden hukommelse, der er allokeret af operatøren, newtilbage til heapen . Opkaldet deleteskal ske for hvert opkald newfor at undgå hukommelseslækager . Efter opkaldet deletebliver objektet, der peger på dette hukommelsesområde, ugyldigt og bør ikke længere bruges. Mange programmører tildeler 0 (nul pointer) til pointere efter brug deletefor at minimere programmeringsfejl. Fjernelse af nul-markøren har ingen reel effekt, så der er ingen grund til at kontrollere pointeren for lighed med 0, før du kalder delete(en sådan kontrol er en del af operatørens algoritme delete).

Kodestykke som eksempel:

int * p_var = nullptr ; // erklæring af en ny pointer p_var = new int ; // hukommelse er dynamisk allokeret /* ....... resten af ​​koden ........*/ slet p_var ; // hukommelse er frigivet p_var = nullptr ; // pointer erstattes af en null pointer

Arrays oprettet (allokeret) med new [], kan på samme måde destrueres (deallokeres) med delete []:

int størrelse = 10 ; int * p_var = nullptr ; // erklæring af en ny pointer p_var = new int [ størrelse ]; // hukommelse er dynamisk allokeret /* ...... resten af ​​koden ........*/ slet [] p_var ; // hukommelse er frigivet p_var = nullptr ; // pointer erstattes af en null pointer

Hvis du kalder delete[]på en række objekter, kaldes destruktoren for hvert objekt, før den hukommelse, der er allokeret til arrayet, frigøres.

Med udviklingen af ​​C++-sproget og standardiseringen af ​​RAII- teknologi i moderne softwareprodukter anbefales brugen af ​​manuel hukommelsesallokering ved brug og operationer ikke new[ 2] . delete

Adgangsspecifikation

I sprogstandarden C++11 blev konteksten for at bruge nøgleordet deleteudvidet, og det begyndte at blive brugt ikke kun som en operation i forbindelse med operationen new, men også som en specificator sammen med nøgleordet default. I denne rolle er specifikationens funktion deleteblevet en eksplicit begrænsning af adgangen til specielle klassemetoder ( konstruktører , destruktorer , flyttekonstruktører, tildelingsoperatorer osv.) defaultSpecifikatoren giver dig på samme måde mulighed for at angive den klassemetode, som compileren er instrueret i . til at bruge som standard [1] .

Noter

  1. 1 2 Olsson, 2018 , Særlige medlemsfunktioner, s. 77.
  2. Horton, Van Weert, 2018 , s. 609.

Kilder

  • I. Horton, P. Van Weert. Begyndende C++17: Fra nybegynder til professionel. — Femte Udgave. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. C++17 Hurtig syntaksreference: En lommevejledning til sproget, API'er og bibliotek. — Tredje Udgave. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Links