delete — Operator (C++)

Cofa przydział bloku pamięci.

Składnia

[::] deletewyrażenie-rzutowanie
[::] delete []wyrażenie-rzutowanie

Uwagi

Argument wyrażenia rzutowania musi być wskaźnikiem do bloku pamięci przydzielonej wcześniej dla obiektu utworzonego za pomocą nowego operatora. Operator delete ma wynik typu void i dlatego nie zwraca wartości. Przykład:

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

Użycie delete wskaźnika do obiektu, który nie został przydzielony, new daje nieprzewidywalne wyniki. Można jednak użyć delete wskaźnika z wartością 0. Ta aprowizacja oznacza, że gdy new zwraca wartość 0 po niepowodzeniu, usunięcie wyniku operacji, która zakończyła się new niepowodzeniem, jest nieszkodliwe. Aby uzyskać więcej informacji, zobacz Nowe i usuń operatory.

Operatory new i delete mogą być również używane dla typów wbudowanych, w tym tablic. Jeśli pointer odwołuje się do tablicy, umieść puste nawiasy ([]) przed pointer:

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

delete Użycie operatora na obiekcie cofa przydział pamięci. Program, który wyłusza wskaźnik po usunięciu obiektu, może mieć nieprzewidywalne wyniki lub awarie.

Gdy delete jest używana do cofnięcia przydziału pamięci dla obiektu klasy C++, destruktor obiektu jest wywoływany przed cofnięciem przydziału pamięci obiektu (jeśli obiekt ma destruktor).

Jeśli operand delete operatora jest modyfikowalną wartością l, jego wartość jest niezdefiniowana po usunięciu obiektu.

Jeśli określono opcję kompilatora /sdl (Włącz dodatkowe kontrole zabezpieczeń), operand operatora delete jest ustawiony na nieprawidłową wartość po usunięciu obiektu.

Używanie opcji usuwania

Istnieją dwa warianty składniowe dla operatora usuwania: jeden dla pojedynczych obiektów, a drugi dla tablic obiektów. Poniższy fragment kodu pokazuje, jak się różnią:

// 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;
}

Następujące dwa przypadki generują niezdefiniowane wyniki: przy użyciu formularza tablicy delete (delete []) w obiekcie i przy użyciu niearray formy usuwania w tablicy.

Przykład

Aby zapoznać się z przykładami użycia , deletezobacz nowy operator.

Jak działa usuwanie

Operator usuwania wywołuje operator funkcji delete.

W przypadku obiektów, które nie mają typu klasy (klasy, struktury lub unii), wywoływany jest operator usuwania globalnego. W przypadku obiektów typu klasy nazwa funkcji deallocation jest rozpoznawana w zakresie globalnym, jeśli wyrażenie usuwania rozpoczyna się od jednoargumentowego operatora rozpoznawania zakresu (::). W przeciwnym razie operator usuwania wywołuje destruktor obiektu przed cofnięciem przydziału pamięci (jeśli wskaźnik nie ma wartości null). Operator usuwania można zdefiniować dla poszczególnych klas; Jeśli nie ma takiej definicji dla danej klasy, wywoływana jest funkcja usuwania operatora globalnego. Jeśli wyrażenie usuwania jest używane do cofnięcia przydziału obiektu klasy, którego typ statyczny ma destruktor wirtualny, funkcja cofania transakcji jest rozpoznawana za pośrednictwem destruktora wirtualnego typu dynamicznego obiektu.

Zobacz też

Wyrażenia z operatorami jednoargumentowymi
Słowa kluczowe
new i delete, operatory