logo

slett søkeord i C++

slette er en operatør som er vant til ødelegge array og ikke-array (peker) gjenstander som er dynamisk skapt av ny operatør.

    slett kan brukes enten ved å bruke slett operatør eller slett operatoren [ ].
  • De ny operator brukes for dynamisk minneallokering som lagrer variabler på heap-minne.
  • Dette betyr at sletteoperatøren tildeler minne fra haug .
  • Pekeren til objektet blir ikke ødelagt, verdien eller minneblokken som pekes av pekeren blir ødelagt.
  • Slettoperatøren har tomrom returtype som betyr at den ikke returnerer noen verdi.

Nedenfor er noen eksempler på hvor vi kan bruke delete-operatoren:



1. Sletting av matriseobjekter

Vi sletter en matrise ved å bruke [] 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;> }>

hvordan oppdatere i java

>

>

2. Sletting av NULL-pekeren

Sletting av en NULL forårsaker ingen endring og gir ingen feil.

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. Slette peker med eller uten verdi

Minnet pekt ut av den spesifiserte pekeren vil bli deallokert fra heap-minnet.

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;> }>

>

>

Produksjon

Value of ptr1 = 0 Value of ptr2 = 20>

4. Slette en ugyldig peker

Slettoperatøren tildeler ikke bare minnet, men kaller også destruktoren til objektet som skal slettes. Det er derfor, hvis vi bruker void pointer med delete, vil det føre til udefinert atferd.

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;> }>

>

>

Produksjon

ptr deleted successfully>

5. Sletting av minne dynamisk allokert av malloc()

Deallokering av minne tildelt av malloc() ved å bruke delete-operatoren fører også til udefinert oppførsel. Det anbefales å bruke 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;> }>

>

>

Produksjon

er et forhold
ptr2 deleted successfully>

Merk : Selv om programmet ovenfor kjører fint på GCC. Det anbefales ikke å bruke delete med malloc().

6. Slette variabler av brukerdefinerte 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;> }>

>

>

Produksjon

custom delete for size 1 custom delete for size 18>

Unntak

1. Prøver å slette et ikke-pekerobjekt

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

>

Produksjon

error: type ‘int’ argument given to ‘delete’, expected pointer>

2. Prøver å slette pekeren til en lokal stabeltildelt 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;> }>

>

>

Produksjon

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>

relaterte artikler

  • nytt søkeord
  • C++ malloc()