Șterge (C++)

delete este un cuvânt cheie al limbajului de programare C++ , care a fost introdus inițial în standard pentru a se ocupa de eliberarea memoriei alocate de new. În standardul C++11 modernizat , cuvântului cheie deletei s-a atribuit și rolul unui specificator de acces pentru funcțiile speciale ale membrilor clasei , care interzice utilizarea acestora [1] .

Operațiune de gestionare a memoriei

În limbajul de programare C++ , operatorul deletereturnează memoria alocată de operator newînapoi în heap . Apelul deletetrebuie să aibă loc pentru fiecare apel newpentru a evita scurgerile de memorie . După apel delete, obiectul care indică această zonă de memorie devine invalid și nu mai trebuie utilizat. Mulți programatori atribuie 0 (pointer nul) indicatorilor după folosire deletepentru a minimiza erorile de programare. Eliminarea indicatorului nul nu are efect real, deci nu este nevoie să verificați indicatorul pentru egalitatea cu 0 înainte de a apela delete(o astfel de verificare face parte din algoritmul operatorului delete).

Fragment de cod ca exemplu:

int * p_var = nullptr ; // declararea unui nou pointer p_var = new int ; // memoria este alocată dinamic /* ....... restul codului ........*/ șterge p_var ; // memoria este eliberată p_var = nullptr ; // pointerul este înlocuit cu un pointer nul

Matricele create (alocate) cu new [], pot fi în mod similar distruse (dealocate) cu delete []:

int dimensiune = 10 ; int * p_var = nullptr ; // declararea unui nou pointer p_var = new int [ size ]; // memoria este alocată dinamic /* ...... restul codului ........*/ șterge [] p_var ; // memoria este eliberată p_var = nullptr ; // pointerul este înlocuit cu un pointer nul

Apelarea delete[]unei matrice de obiecte va apela destructorul pentru fiecare obiect înainte de a elibera memoria alocată matricei.

Odată cu dezvoltarea limbajului C++ și standardizarea tehnologiei RAII în produsele software moderne, utilizarea utilizării și operațiunilor de alocare manuală a memoriei nu neweste deleterecomandată [2] .

Specificator de acces

În standardul limbajului C++11, contextul de utilizare a cuvântului cheie deletea fost extins și acesta a început să fie folosit nu numai ca operație împreună cu operația new, ci și ca specificator împreună cu cuvântul cheie default. În acest rol, funcția specificatorului deletea devenit o restricție explicită a accesului la metode speciale de clasă ( constructori , destructori , constructori de mutare, operatori de atribuire etc.). Specificatorul defaultvă permite în mod similar să specificați metoda clasei pe care compilatorul este instruit. pentru a utiliza implicit [1] .

Note

  1. 1 2 Olsson, 2018 , Special Member Functions, p. 77.
  2. Horton, Van Weert, 2018 , p. 609.

Surse

  • I. Horton, P. Van Weert. Începând cu C++17: de la novice la profesionist. — Ediția a cincea. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. Referință de sintaxă rapidă C++17: un ghid de buzunar pentru limbaj, API-uri și bibliotecă. - A treia editie. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Link -uri