Smazat (C++)

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

Operace správy paměti

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 ukazatelem

Pole 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 ukazatelem

Volá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

Specifikátor přístupu

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

Poznámky

  1. 1 2 Olsson, 2018 , Speciální členské funkce, str. 77.
  2. Horton, Van Weert, 2018 , str. 609.

Zdroje

  • I. Horton, P. Van Weert. Začátek C++17: Od nováčka k profesionálovi. — Páté vydání. - Apress, 2018. - ISBN 978-1-4842-3366-5 . - doi : 10.1007/978-1-4842-3366-5 .
  • M. Olsson. Rychlý průvodce syntaxí C++17: Kapesní průvodce jazykem, rozhraními API a knihovnou. - Třetí edice. - Apress, 2018. - ISBN 978-1-4842-3599-7 . - doi : 10.1007/978-1-4842-3600-0 .

Odkazy