delete-Operator (C++)
Gibt einen Speicherblock frei.
Syntax
[
::
]delete
Umwandlungsausdruck
[::
]delete []
Umwandlungsausdruck
Hinweise
Das Umwandlungsausdruck-Argument muss ein Zeiger auf einen Speicherblock sein, der zuvor einem objekt zugeordnet wurde, das mit dem neuen Operator erstellt wurde. Der delete
Operator hat ein Ergebnis vom Typ void
und gibt daher keinen Wert zurück. Beispiel:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
Die Verwendung delete
auf einem Zeiger auf ein Objekt, das new
nicht zugeordnet ist, führt zu unvorhersehbaren Ergebnissen. Sie können jedoch auf einem Zeiger mit dem Wert 0 verwenden delete
. Diese Bereitstellung bedeutet, dass das Löschen des Ergebnisses eines fehlgeschlagenen new
Vorgangs, wenn new
"0" bei Einem Fehler zurückgegeben wird, harmlos ist. Weitere Informationen finden Sie unter "Die neuen Operatoren und Löschoperatoren".
Die new
Operatoren delete
und Operatoren können auch für integrierte Typen verwendet werden, einschließlich Arrays. Wenn pointer
sich auf ein Array bezieht, platzieren Sie leere Klammern ([]
) vor pointer
:
int* set = new int[100];
//use set[]
delete [] set;
Wenn Sie den delete
Operator für ein Objekt verwenden, werden dessen Speicher zugewiesen. Ein Programm, das einen Zeiger dereferenziert, nachdem das Objekt gelöscht wurde, kann zu unvorhersehbaren Ergebnissen führen oder abstürzen.
Wenn delete
zum Behandeln des Speichers für ein C++-Klassenobjekt verwendet wird, wird der Destruktor des Objekts aufgerufen, bevor der Speicher des Objekts zugeordnet wird (wenn das Objekt über einen Destruktor verfügt).
Wenn der Operand für den delete
Operator ein modifizierbarer l-Wert ist, wird der Wert nach dem Löschen des Objekts nicht definiert.
Wenn die Compileroption /sdl (Zusätzliche Sicherheitsüberprüfungen aktivieren) angegeben ist, wird der Operand für den delete
Operator auf einen ungültigen Wert festgelegt, nachdem das Objekt gelöscht wurde.
Verwenden von "delete"
Es gibt zwei syntaktische Varianten für den Löschoperator: eine für einzelne Objekte und die andere für Arrays von Objekten. Das folgende Codefragment zeigt, wie sie unterschiedlich sind:
// 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;
}
Die folgenden beiden Fälle erzeugen nicht definierte Ergebnisse: Verwenden der Arrayform des Löschens (delete []
) für ein Objekt und Verwenden der nichtarray-Form des Löschens in einem Array.
Beispiel
Beispiele für die Verwendung delete
finden Sie unter "Neuer Operator".
Funktionsweise von „delete“
Der Löschoperator ruft den Löschoperator auf.
Für Objekte, die nicht vom Klassentyp (Klasse, Struktur oder Union) sind, wird der globale Löschoperator aufgerufen. Bei Objekten des Klassentyps wird der Name der Deallocation-Funktion im globalen Bereich aufgelöst, wenn der Löschausdruck mit dem unären Bereichsauflösungsoperator (::
) beginnt. Andernfalls ruft der delete-Operator den Destruktor für ein Objekt vor dem Freigeben des Speichers auf (wenn der Zeiger nicht NULL ist). Der delete-Operator kann auf Basis einer einzelnen Klasse definiert werden; wenn keine solche Definition für eine bestimmte Klasse vorliegt, wird der globale delete-Operator aufgerufen. Wenn der Löschausdruck verwendet wird, um ein Klassenobjekt freizugeben, dessen statischer Typ einen virtuellen Destruktor aufweist, wird die Funktion zum Aufheben der Zuordnung vom virtuellen Destruktor des dynamischen Typs des Objekts aufgelöst.
Siehe auch
Ausdrücke mit unären Operatoren
Schlüsselwörter
Operatoren "new" und "delete"
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für