Radera (C++)

delete är ett nyckelord för programmeringsspråket C++ , som ursprungligen introducerades i standarden för att hantera frigörandet av minne som tilldelats av new. I den moderniserade C++11- standarden tilldelades nyckelordet deleteockså rollen som en åtkomstspecifikator för speciella klassmedlemsfunktioner , vilket förbjuder deras användning [1] .

Minneshanteringsoperation

I programmeringsspråket C++ returnerar operatören deleteminnet som tilldelats av operatören newtillbaka till högen . Samtalet deletemåste ske för varje samtal newför att undvika minnesläckor . Efter anropet deleteblir objektet som pekar på detta minnesområde ogiltigt och ska inte längre användas. Många programmerare tilldelar 0 (nullpekare) till pekare efter användning deleteför att minimera programmeringsfel. Att ta bort nollpekaren har ingen faktisk effekt, så det finns inget behov av att kontrollera pekaren för lika med 0 innan du anropar delete(en sådan kontroll är en del av operatörens algoritm delete).

Kodavsnitt som exempel:

int * p_var = nullptr ; // deklaration av en ny pekare p_var = new int ; // minne är dynamiskt allokerat /* ....... resten av koden ........*/ ta bort p_var ; // minne är frigjort p_var = nullptr ; // pekaren ersätts av en nollpekare

Arrayer skapade (allokerade) med new [], kan på liknande sätt förstöras (avallokeras) med delete []:

int storlek = 10 ; int * p_var = nullptr ; // deklaration av en ny pekare p_var = new int [ storlek ]; // minne är dynamiskt allokerat /* ...... resten av koden ........*/ ta bort [] p_var ; // minne är frigjort p_var = nullptr ; // pekaren ersätts av en nollpekare

Att anropa delete[]en array av objekt kommer att anropa destruktorn för varje objekt innan minnet som tilldelats för arrayen frigörs.

Med utvecklingen av C++-språket och standardiseringen av RAII-new teknik i moderna mjukvaruprodukter rekommenderas deleteinte användningen av manuell minnesallokering med användning och operationer [2] .

Åtkomstspecifikator

I språkstandarden C++11 deleteutökades sammanhanget för att använda nyckelordet och det började användas inte bara som en operation i samband med operationen newutan också som en specificator tillsammans med nyckelordet default. I denna roll har specificatorns funktion deleteblivit en explicit begränsning av åtkomst till speciella klassmetoder ( konstruktörer , destruktorer , flyttkonstruktörer, tilldelningsoperatorer, etc.) defaultSpecifieraren låter dig på samma sätt specificera klassmetoden som kompilatorn instrueras att använda som standard [1] .

Anteckningar

  1. 1 2 Olsson, 2018 , Särskilda medlemsfunktioner, sid. 77.
  2. Horton, Van Weert, 2018 , sid. 609.

Källor

  • I. Horton, P. Van Weert. Början C++17: Från nybörjare till proffs. — Femte upplagan. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. C++17 Snabbsyntaxreferens: En fickguide till språket, API:erna och biblioteket. - Tredje upplagan. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Länkar