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