Sdílet prostřednictvím


delete – operátor (C++)

Zruší přidělení bloku paměti.

Syntaxe

[::] deletepřetypování výrazu
[::] delete []přetypování výrazu

Poznámky

Argument přetypování musí být ukazatel na blok paměti, který byl dříve přidělen objektu vytvořenému pomocí nového operátoru. Operátor delete má výsledek typu void , a proto nevrací hodnotu. Příklad:

CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;

Použití delete ukazatele na objekt, který není přidělen pomocí new , poskytuje nepředvídatelné výsledky. Můžete ale použít delete ukazatel s hodnotou 0. Toto zřízení znamená, že když new se vrátí hodnota 0 při selhání, odstranění výsledku neúspěšné new operace je neškodné. Další informace naleznete v tématu Nové a odstranit operátory.

Operátory new a delete operátory lze použít také pro předdefinované typy, včetně polí. Pokud pointer odkazuje na pole, umístěte prázdné závorky ([]) před pointer:

int* set = new int[100];
//use set[]
delete [] set;

Použití operátoru delete u objektu uvolní jeho paměť. Program, který přistoupí přes ukazatel po odstranění objektu, může mít nepředvídatelné výsledky nebo se zhroutit.

Pokud delete se používá k uvolnění paměti pro objekt třídy C++, je volána destruktor objektu před uvolněním paměti objektu (pokud má objekt destruktor).

Pokud je operand delete operátoru upravitelnou l-hodnotou, jeho hodnota je po odstranění objektu nedefinovaná.

Pokud je zadána možnost kompilátoru /sdl (Povolit další kontroly zabezpečení), operand delete operátoru je po odstranění objektu nastaven na neplatnou hodnotu.

Používání příkazu delete

Operátor delete má dvě syntaktické varianty: jednu pro jednotlivé objekty a druhou pro pole objektů. Následující fragment kódu ukazuje, jak se liší:

// expre_Using_delete.cpp
struct UDType
{
};

int main()
{
   // Allocate a user-defined object, UDObject, and an object
   //  of type double on the free store using the
   //  new operator.
   UDType *UDObject = new UDType;
   double *dObject = new double;
   // Delete the two objects.
   delete UDObject;
   delete dObject;
   // Allocate an array of user-defined objects on the
   // free store using the new operator.
   UDType (*UDArr)[7] = new UDType[5][7];
   // Use the array syntax to delete the array of objects.
   delete [] UDArr;
}

Následující dva případy vytvářejí nedefinované výsledky: pomocí maticové formy delete (delete []) u objektu a použití nearray formy delete v poli.

Příklad

Příklady použití deletenajdete v části Nový operátor.

Jak funguje odstranění

Operátor delete vyvolá operátor funkce delete.

U objektů, které nejsou typu třídy (třída, struktura nebo sjednocení), je vyvolán globální operátor delete. U objektů typu třídy se název funkce deallocation přeloží v globálním oboru, pokud výraz delete začíná operátorem překladu unárního oboru (::). V opačném případě operátor delete vyvolá destruktor objektu před zrušením přidělení paměti (pokud není ukazatel null). Operátor delete lze definovat na základě každé třídy. Neexistuje-li pro zadanou třídu žádná taková definice, je vyvolán globální operátor delete. Je-li výraz delete používán k zrušení přidělení objektu třídy, jehož statický typ má virtuální destruktor, je funkce zrušení přidělení řešena prostřednictvím virtuálního konstruktoru dynamického typu objektu.

Viz také

Výrazy s unárními operátory
Klíčová slova
Operátory new a delete