löschen ist ein Operator das ist ja gewohnt Array zerstören Und Nicht-Array (Zeiger) Objekte die von der dynamisch erstellt werden neu Operator.
- delete kann entweder mit dem verwendet werden Löschoperator oder delete [ ]-Operator.
- Der neu Der Operator wird für die dynamische Speicherzuweisung verwendet, die Variablen im Heap-Speicher speichert.
- Dies bedeutet, dass der Löschoperator die Speicherzuordnung aufhebt Haufen .
- Der Zeiger auf das Objekt wird nicht zerstört, der Wert oder Speicherblock, auf den der Zeiger zeigt, wird zerstört.
- Der Löschoperator hat Leere Rückgabetyp, was bedeutet, dass kein Wert zurückgegeben wird.
Nachfolgend finden Sie einige Beispiele dafür, wo wir den Löschoperator anwenden können:
1. Array-Objekte löschen
Wir löschen ein Array mit []-Klammern.
C++
// Program to illustrate deletion of array> #include> using> namespace> std;> int> main()> {> >// Allocate Heap memory> >int>* array =>new> int>[10];> >// Deallocate Heap memory> >delete>[] array;> >return> 0;> }> |
>
>
2. NULL-Zeiger löschen
Das Löschen eines NULL-Werts führt zu keiner Änderung und gibt keinen Fehler aus.
Javascript-Datum
C++
// C++ program for deleting> // NULLL pointer> #include> using> namespace> std;> int> main()> {> >// ptr is NULL pointer> >int>* ptr = NULL;> >// deleting ptr> >delete> ptr;> >return> 0;> }> |
>
>
3. Zeiger mit oder ohne Wert löschen
Der Speicher, auf den der angegebene Zeiger zeigt, wird vom Heap-Speicher freigegeben.
C++
// C++ program for deleting pointer with or without value> #include> using> namespace> std;> int> main()> {> >// Creating int pointer> >int>* ptr1 =>new> int>;> >// Initializing pointer with value 20> >int>* ptr2 =>new> int>(20);> >cout <<>'Value of ptr1 = '> << *ptr1 <<>'
'>;> >cout <<>'Value of ptr2 = '> << *ptr2 <<>'
'>;> >// Destroying ptr1> >delete> ptr1;> >// Destroying ptr2> >delete> ptr2;> >return> 0;> }> |
>
>Ausgabe
Value of ptr1 = 0 Value of ptr2 = 20>
4. Löschen eines Void-Zeigers
Der Löschoperator gibt nicht nur den Speicher frei, sondern ruft auch den Destruktor des zu löschenden Objekts auf. Aus diesem Grund führt die Verwendung eines Void-Zeigers beim Löschen zu undefiniertem Verhalten.
C++
Eindeutiger MySQL-Schlüssel
// C++ prgram for deleting a void pointer> #include> using> namespace> std;> int> main()> {> >// Creating void pointer> >void>* ptr;> >// Destroying void pointer> >delete> ptr;> >cout <<>'ptr deleted successfully'>;> >return> 0;> }> |
>
>Ausgabe
ptr deleted successfully>
5. Löschen des von malloc() dynamisch zugewiesenen Speichers
Das Freigeben von Speicher, der von malloc() mit dem Löschoperator zugewiesen wurde, führt ebenfalls zu undefiniertem Verhalten. Es wird empfohlen, delete für new und free() für malloc zu verwenden.
Muschelsortierung
C++
// C++ program for deleting memory dynamically allocated by> // malloc> #include> using> namespace> std;> int> main()> {> >// Dynamic memory allocated by using malloc> >int>* ptr2 = (>int>*)>malloc>(>sizeof>(>int>));> >delete> ptr2;> >cout <<>'ptr2 deleted successfully'>;> >return> 0;> }> |
>
>Ausgabe
ptr2 deleted successfully>
Notiz : Obwohl das obige Programm unter GCC einwandfrei läuft. Es wird nicht empfohlen, delete mit malloc() zu verwenden.
6. Variablen benutzerdefinierter Datentypen löschen
C++
// C++ program for deleting variables of User Defined data> // types> #include> using> namespace> std;> struct> P {> >// Overloading delete operator for single object> >// deallocation> >static> void> operator>delete>(>void>* ptr,>size_t> sz)> >{> >cout <<>'custom delete for size '> << sz << endl;> >// ::operator delete(ptr) can also be used> >::operator>delete>(ptr);> >}> >// Overloading delete operator for array deallocation> >static> void> operator>delete>[](>void>* ptr,>size_t> sz)> >{> >cout <<>'custom delete for size '> << sz << endl;> >// ::operator delete(ptr) can also be used> >::operator>delete>(ptr);> >}> };> int> main()> {> >P* var1 =>new> P;> >delete> var1;> >P* var2 =>new> P[10];> >delete>[] var2;> }> |
>
>Ausgabe
custom delete for size 1 custom delete for size 18>
Ausnahmen
1. Versuch, ein Nicht-Zeigerobjekt zu löschen
C++
Ausnahme werfen Java
// C++ program for trying to delete a Non-pointer object> #include> using> namespace> std;> int> main()> {> >int> x;> >// Delete operator always> >// requires pointer as input> >delete> x;> >return> 0;> }> |
>
>
Ausgabe
error: type ‘int’ argument given to ‘delete’, expected pointer>
2. Der Versuch, den Zeiger auf eine dem lokalen Stapel zugewiesene Variable zu löschen
C++
// C++ program for trying to delete the pointer to a local> // stack-allocated variable> #include> using> namespace> std;> int> main()> {> >int> x;> >int>* ptr1 = &x;> >// x is present on stack frame as> >// local variable, only dynamically> >// allocated variables can be destroyed> >// using delete operator> >delete> ptr1;> >return> 0;> }> |
>
>
Ausgabe
main.cpp: In function ‘int main()’: main.cpp:16:12: warning: ‘void operator delete(void*, std::size_t)’ called on unallocated object ‘x’ [-Wfree-nonheap-object] 16 | delete ptr1; | ^~~~ main.cpp:9:9: note: declared here 9 | int x; | ^ free(): invalid pointer>
In Verbindung stehende Artikel
- neues Schlüsselwort
- C++ malloc()