delete je klíčové slovo programovacího jazyka C++ , které bylo původně zavedeno do standardu, aby se zabývalo uvolňováním paměti přidělené rozhraním new. V modernizovaném standardu C++11 byla klíčovému slovu deletepřiřazena také role specifikátoru přístupu pro speciální členské funkce třídy , což zakazuje jejich použití [1] .
V programovacím jazyce C++ operátor deletevrací paměť přidělenou operátorem newzpět do haldy . K volání deletemusí dojít pro každé volání new, aby nedošlo k úniku paměti . Po volání deletese objekt směřující do této oblasti paměti stane neplatným a neměl by být nadále používán. Mnoho programátorů přiřadí ukazatelům po použití 0 (nulový ukazatel), aby deletese minimalizovaly chyby programování. Odstranění nulového ukazatele nemá žádný skutečný účinek, takže není třeba před voláním kontrolovat, zda ukazatel odpovídá 0 delete(taková kontrola je součástí algoritmu operátora delete).
Fragment kódu jako příklad:
int * p_var = nullptr ; // deklarace nového ukazatele p_var = new int ; // paměť je dynamicky alokována /* ....... zbytek kódu ........*/ smazat p_var ; // paměť je uvolněna p_var = nullptr ; // ukazatel je nahrazen nulovým ukazatelemPole vytvořená (přidělená) pomocí new [], mohou být podobně zničena (přidělena) pomocí delete []:
int velikost = 10 ; int * p_var = nullptr ; // deklarace nového ukazatele p_var = new int [ velikost ]; // paměť je dynamicky alokována /* ...... zbytek kódu ........*/ smazat [] p_var ; // paměť je uvolněna p_var = nullptr ; // ukazatel je nahrazen nulovým ukazatelemVolání delete[]pole objektů zavolá destruktor pro každý objekt před uvolněním paměti přidělené pro pole.
S rozvojem jazyka C++ a standardizací technologie RAII v moderních softwarových produktech se použití ručního přidělování paměti pomocí a operací newnedoporučuje [2] . delete
V jazykovém standardu C++11 deletebyl rozšířen kontext pro použití klíčového slova a začalo se používat nejen jako operace ve spojení s operací new, ale také jako specifikátor spolu s klíčovým slovem default. V této roli se funkce specifikátoru deletestala výslovným omezením přístupu ke speciálním metodám tříd ( konstruktory , destruktory , přesunové konstruktory, operátory přiřazení atd.) defaultSpecifikátor podobně umožňuje specifikovat metodu třídy, kterou je kompilátor instruován použít jako výchozí [1] .