verwijderen is een exploitant dat is gewend array vernietigen En niet-array (wijzer) voorwerpen die dynamisch worden gecreëerd door de nieuw exploitant.
- verwijderen kan worden gebruikt door de operator verwijderen of operator [ ] verwijderen.
- De nieuw operator wordt gebruikt voor dynamische geheugentoewijzing, waarbij variabelen in het heapgeheugen worden opgeslagen.
- Dit betekent dat de verwijderoperator de toewijzing van geheugen van de hoop .
- De aanwijzer naar het object wordt niet vernietigd, de waarde of het geheugenblok waarnaar de aanwijzer verwijst, wordt vernietigd.
- De verwijderoperator heeft leegte return type, wat betekent dat het geen enkele waarde retourneert.
Hieronder vindt u enkele voorbeelden van waar we de verwijderoperator kunnen toepassen:
1. Arrayobjecten verwijderen
We verwijderen een array met [] haakjes.
r in c-programmering
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-aanwijzer verwijderen
Het verwijderen van een NULL veroorzaakt geen enkele verandering en geeft geen foutmelding.
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. Aanwijzer verwijderen met of zonder waarde
Het geheugen dat door de gespecificeerde pointer wordt aangewezen, wordt uit het heapgeheugen verwijderd.
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;> }> |
>
verschil tussen een leeuw en een tijger
>Uitvoer
Value of ptr1 = 0 Value of ptr2 = 20>
4. Een lege aanwijzer verwijderen
De verwijderoperator maakt niet alleen de toewijzing van het geheugen ongedaan, maar roept ook de destructor van het te verwijderen object op. Dat is de reden waarom, als we void pointer gebruiken met delete, dit zal leiden tot ongedefinieerd gedrag.
C++
// 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;> }> |
>
>
Java-connectiviteitUitvoer
ptr deleted successfully>
5. Geheugen verwijderen dat dynamisch is toegewezen door malloc()
Het ongedaan maken van de toewijzing van geheugen dat is toegewezen door malloc() met behulp van de delete-operator leidt ook tot ongedefinieerd gedrag. Het wordt aanbevolen om delete voor new en free() voor malloc te gebruiken.
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;> }> |
>
>Uitvoer
ptr2 deleted successfully>
Opmerking : Hoewel het bovenstaande programma prima draait op GCC. Het wordt niet aanbevolen om delete te gebruiken met malloc().
6. Variabelen van door de gebruiker gedefinieerde gegevenstypen verwijderen
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;> }> |
>
binaire boom versus bst
>Uitvoer
custom delete for size 1 custom delete for size 18>
Uitzonderingen
1. Proberen een niet-aanwijzerobject te verwijderen
C++
fakkel installeren
// 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;> }> |
>
>
Uitvoer
error: type ‘int’ argument given to ‘delete’, expected pointer>
2. Proberen de aanwijzer naar een lokale, aan de stapel toegewezen variabele te verwijderen
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;> }> |
>
>
Uitvoer
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>
gerelateerde artikelen
- nieuw trefwoord
- C++ malloc()