Poista (C++)

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

Muistinhallintatoiminto

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 nollaosoittimella

Matriisit, 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 nollaosoittimella

Objektien 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] .

Käyttöoikeusmääritys

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] .

Muistiinpanot

  1. 1 2 Olsson, 2018 , Erityiset jäsentoiminnot, s. 77.
  2. Horton, Van Weert, 2018 , s. 609.

Lähteet

  • I. Horton, P. Van Weert. Alku C++17: Aloittelijasta ammattilaiseksi. - Viides painos. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. C++17 Quick Syntax Reference: Pocket Guide to Language, API ja Library. – Kolmas painos. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Linkit