logo

slet søgeord i C++

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()