delete on C++-ohjelmointikielen avainsana , joka otettiin alun perin standardiin käsittelemään :n varaaman muistin vapauttamista . Uudistetussa C++11 -standardissa avainsanalle on annettu myös erityisluokan jäsenfunktioiden pääsymääritteen rooli , mikä kieltää niiden käytön [1] . newdelete
C++- ohjelmointikielessä operaattori deletepalauttaa operaattorin varaaman muistin newtakaisin kasaan . Puhelun deletetulee tapahtua jokaisen puhelun yhteydessä muistivuotojennew välttämiseksi . Kutsun jälkeen tälle muistialueelle osoittava objekti ei kelpaa, eikä sitä tule enää käyttää. Monet ohjelmoijat antavat osoittimille 0:n (nollaosoittimen) käytön jälkeen ohjelmointivirheiden minimoimiseksi. Nollaosoittimen poistamisella ei ole varsinaista vaikutusta, joten osoittimen yhtäläisyyttä 0:n kanssa ei tarvitse tarkistaa ennen kutsumista (sellainen tarkistus on osa operaattorin algoritmia ). deletedeletedeletedelete
Esimerkkinä koodinpätkä:
int * p_var = nullptr ; // uuden osoittimen ilmoitus p_var = new int ; // muisti on varattu dynaamisesti /* ....... loput koodista ........*/ poista p_var ; // muisti vapautetaan p_var = nullptr ; // osoitin korvataan nollaosoittimellaMatriisit, jotka on luotu (allokoitu) kanssa new [], voidaan samalla tavalla tuhota (vapauttaa) komennolla delete []:
int koko = 10 ; int * p_var = nullptr ; // uuden osoittimen ilmoitus p_var = uusi int [ koko ]; // muisti varataan dynaamisesti /* ...... loput koodista ........*/ poista [] p_var ; // muisti vapautetaan p_var = nullptr ; // osoitin korvataan nollaosoittimellaObjektien joukon kutsuminen delete[]kutsuu kunkin objektin destructorin ennen kuin taulukolle varattu muisti vapautuu.
C++-kielen kehittyessä ja RAIInew -tekniikan standardoituessa nykyaikaisissa ohjelmistotuotteissa ei deletesuositella manuaalisen muistinvarauksen käyttöä ja operaatioita [2] .
C++11-kielistandardissa avainsanan deletekäyttökontekstia laajennettiin ja sitä alettiin käyttää paitsi operaationa operaation yhteydessä new, myös määrittäjänä avainsanan kanssa default. Tässä roolissa määritteen funktiosta deleteon tullut eksplisiittinen rajoitus pääsylle erityisiin luokkamenetelmiin ( konstruktorit , destruktorit , siirtokonstruktorit, osoitusoperaattorit jne.). defaultMääritteen avulla voit samoin määrittää luokkametodin, jota kääntäjä ohjaa. oletuksena käytettäväksi [1] .