logo

ștergeți cuvântul cheie în C++

șterge este o operator care este obișnuit distruge matricea și non-matrice (indicator) obiecte care sunt create dinamic de către nou operator.

    ștergerea poate fi folosită fie folosind operator de ștergere sau ștergeți operatorul [ ].
  • The nou operatorul este utilizat pentru alocarea dinamică a memoriei care stochează variabile în memoria heap.
  • Aceasta înseamnă că operatorul de ștergere dezaocă memoria din morman .
  • Pointerul către obiect nu este distrus, valoarea sau blocul de memorie indicat de pointer este distrus.
  • Operatorul de ștergere are gol return type, ceea ce înseamnă că nu returnează nicio valoare.

Mai jos sunt câteva exemple de unde putem aplica operatorul de ștergere:



1. Ștergerea obiectelor matrice

Ștergem o matrice folosind paranteze [].

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. Ștergerea Pointerului NULL

Ștergerea unui NULL nu provoacă nicio modificare și nu dă nicio eroare.

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

>

if else if else if java

>

3. Ștergerea pointerului cu sau fără valoare

Memoria indicată de pointerul specificat va fi dealocată din memoria heap.

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

>

>

Ieșire

Value of ptr1 = 0 Value of ptr2 = 20>

4. Ștergerea unui indicator de gol

Operatorul de ștergere nu numai că dealoca memoria, dar cheamă și distrugătorul obiectului de șters. De aceea, dacă folosim indicatorul void cu ștergere, va duce la un comportament nedefinit.

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

>

>

Ieșire

ptr deleted successfully>

5. Ștergerea memoriei alocate dinamic de malloc()

Dealocarea memoriei alocate de malloc() folosind operatorul de ștergere duce, de asemenea, la un comportament nedefinit. Este recomandat să folosiți delete pentru new și free() pentru 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;> }>

>

>

Ieșire

ptr2 deleted successfully>

Notă : Deși programul de mai sus funcționează bine pe GCC. Nu este recomandat să utilizați delete cu malloc().

6. Ștergerea variabilelor tipurilor de date definite de utilizator

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

>

>

Ieșire

custom delete for size 1 custom delete for size 18>

Excepții

1. Încercarea de a șterge un obiect non-pointer

C++


adnotări în Spring Boot



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

>

>

Ieșire

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

2. Încercarea de a șterge indicatorul către o variabilă locală alocată în stivă

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

>

>

Ieșire

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>

Articole similare

  • cuvânt cheie nou
  • C++ malloc()