Törlés (C++)

delete a C++ programozási nyelv kulcsszava , amelyet eredetileg a szabvány által lefoglalt memória felszabadítására vezettek be . A modernizált C++11 szabványban a kulcsszóhoz a speciális osztálytagfüggvények hozzáférés-meghatározó szerepét is hozzárendelték , ami tiltja azok használatát [1] . newdelete

Memóriakezelési művelet

A C++ programozási nyelvben az operátor deletevisszaadja az operátor által lefoglalt memóriát newa kupacba . A memóriaszivárgás elkerülése érdekében deletea hívásnak minden hívásnál meg kell történnie . A hívás után az erre a memóriaterületre mutató objektum érvénytelenné válik, és többé nem szabad használni. Sok programozó 0-t (null pointer) rendel a mutatókhoz a használat után, hogy minimalizálja a programozási hibákat. A null-mutató eltávolításának nincs tényleges hatása, így nem szükséges ellenőrizni, hogy a mutató egyenlő-e 0-val hívás előtt (az ilyen ellenőrzés az operátor algoritmusának része ). newdeletedeletedeletedelete

Kódrészlet példaként:

int * p_var = nullptr ; // új mutató deklarációja p_var = new int ; // a memória dinamikusan van lefoglalva /* ....... kód többi része ........*/ törölje p_var ; // memória felszabadul p_var = nullptr ; // mutatót null mutató váltja fel

A -val létrehozott (kiosztott) tömbök new []hasonlóképpen megsemmisíthetők (felszabadíthatók) a delete []következővel:

int méret = 10 ; int * p_var = nullptr ; // új mutató deklarációja p_var = new int [ méret ]; // a memória dinamikusan van lefoglalva /* ...... kód többi része ........*/ törlés [] p_var ; // memória felszabadul p_var = nullptr ; // mutatót null mutató váltja fel

Egy objektumtömb meghívása delete[]minden objektumhoz meghívja a destruktort, mielőtt felszabadítaná a tömb számára lefoglalt memóriát.

A C++ nyelv fejlődésével és a RAII technológia szabványosításával a modern szoftvertermékekben a kézi memóriakiosztás használata és műveletei newnem deletejavasoltak [2] .

Hozzáférés-specifikátor

A C++11 nyelvi szabványban a kulcsszó használatának kontextusa deletekibővült, és nem csak műveletként kezdték használni a művelettel együtt new, hanem a kulcsszóval együtt specifikációként is default. Ebben a szerepkörben a specifikátor funkciója a deletespeciális osztálymetódusokhoz való hozzáférés explicit korlátozásává vált ( konstruktorok , destruktorok , konstruktorok mozgatása, hozzárendelési operátorok stb.). A defaultspecifikátor hasonlóképpen lehetővé teszi a fordító által utasított osztálymetódus megadását. alapértelmezett használathoz [1] .

Jegyzetek

  1. 1 2 Olsson, 2018 , Speciális tagi funkciók, p. 77.
  2. Horton, Van Weert, 2018 , p. 609.

Források

  • I. Horton, P. Van Weert. Kezdő C++17: Kezdőtől profivá. — Ötödik kiadás. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. C++17 gyors szintaxishivatkozás: Pocket Guide a nyelvhez, API-khoz és könyvtárhoz. - Harmadik kiadás. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Linkek