slet er en operatør der er vant til ødelægge array og ikke-array (pegepind) genstande som er dynamisk skabt af ny operatør.
- slet kan bruges ved enten at bruge slet operatør eller slet [ ] operator.
- Det ny operator bruges til dynamisk hukommelsesallokering, som gemmer variabler på heap-hukommelse.
- Dette betyder, at sletteoperatøren deallokerer hukommelse fra dynge .
- Pointeren til objektet ødelægges ikke, værdien eller hukommelsesblokken, der peges af markøren, er ødelagt.
- Slet-operatøren har ugyldig returtype, hvilket betyder, at den ikke returnerer nogen værdi.
Nedenfor er nogle eksempler på, hvor vi kan anvende delete-operatoren:
1. Sletning af Array-objekter
Vi sletter et array ved hjælp af [] parenteser.
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;> }> |
række af strukturer i c-sprog
>
>
2. Sletning af NULL-markøren
Sletning af en NULL medfører ingen ændring og giver ingen fejl.
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. Sletning af markør med eller uden værdi
Hukommelsen, der peges på af den specificerede markør, vil blive deallokeret fra heap-hukommelsen.
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;> }> |
>
>Produktion
Value of ptr1 = 0 Value of ptr2 = 20>
4. Sletning af en ugyldig markør
Slet-operatøren deallokerer ikke kun hukommelsen, men den kalder også destruktoren af det objekt, der skal slettes. Det er derfor, hvis vi bruger void pointer med delete, vil det føre til udefineret adfærd.
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;> }> |
>
>Produktion
ptr deleted successfully>
5. Sletning af hukommelse dynamisk allokeret af malloc()
Afallokering af hukommelse tildelt af malloc() ved hjælp af delete-operatoren fører også til udefineret adfærd. Det anbefales at bruge delete for new og free() for malloc.
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;> }> |
>
>Produktion
bin til bcd
ptr2 deleted successfully>
Bemærk : Selvom ovenstående program kører fint på GCC. Det anbefales ikke at bruge delete med malloc().
6. Sletning af variabler af brugerdefinerede datatyper
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;> }> |
>
>Produktion
custom delete for size 1 custom delete for size 18>
Undtagelser
1. Forsøger at slette et ikke-pointer-objekt
C++
// 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;> }> |
>
metode understreng java
>
Produktion
error: type ‘int’ argument given to ‘delete’, expected pointer>
2. Forsøger at slette markøren til en lokal stak-allokeret variabel
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;> }> |
>
>
Produktion
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>
relaterede artikler
- nyt søgeord
- C++ malloc()