delete — Operator (C++)
Cofa przydział bloku pamięci.
Składnia
[
::
]delete
wyraż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. Na 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 , delete
zobacz 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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla