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] .
Î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 nulMatricele 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 nulApelarea 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] .
Î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] .