logo

elimina la parola chiave in C++

eliminare è un operatore a cui è abituato distruggere l'array E non-array (puntatore) oggetti che vengono creati dinamicamente da nuovo operatore.

    delete può essere utilizzato utilizzando il comando operatore cancella O operatore cancella [ ].
  • IL nuovo L'operatore viene utilizzato per l'allocazione dinamica della memoria che memorizza le variabili nella memoria heap.
  • Ciò significa che l'operatore delete dealloca la memoria dal mucchio .
  • Il puntatore all'oggetto non viene distrutto, viene distrutto il valore o il blocco di memoria puntato dal puntatore.
  • L'operatore delete ha vuoto tipo restituito, il che significa che non restituisce alcun valore.

Di seguito sono riportati alcuni esempi di dove possiamo applicare l'operatore delete:



1. Eliminazione di oggetti matrice

Eliminiamo un array utilizzando le parentesi [].

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. Eliminazione del puntatore NULL

L'eliminazione di un NULL non provoca alcuna modifica e non genera errori.

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. Eliminazione del puntatore con o senza valore

La memoria indicata dal puntatore specificato verrà deallocata dalla memoria heap.

C++


concatenazione di stringhe Java



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

>

>

Produzione

Value of ptr1 = 0 Value of ptr2 = 20>

4. Eliminazione di un puntatore vuoto

L'operatore delete non solo dealloca la memoria, ma chiama anche il distruttore dell'oggetto da eliminare. Ecco perché, se utilizziamo il puntatore void con delete, ciò porterà a un comportamento indefinito.

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

>

>

Produzione

ptr deleted successfully>

5. Eliminazione della memoria allocata dinamicamente da malloc()

Anche la deallocazione della memoria allocata da malloc() utilizzando l'operatore delete porta a un comportamento indefinito. Si consiglia di utilizzare delete per new e free() per 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;> }>

>

>

Produzione

nucleo microlitico
ptr2 deleted successfully>

Nota : Sebbene il programma sopra funzioni bene su GCC. Non è consigliabile utilizzare delete con malloc().

6. Eliminazione delle variabili dei tipi di dati definiti dall'utente

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

>

>

Produzione

custom delete for size 1 custom delete for size 18>

Eccezioni

1. Tentativo di eliminare un oggetto non puntatore

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

>

>

Produzione

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

2. Tentativo di eliminare il puntatore a una variabile allocata in stack locale

C++




preordine di attraversamento di un albero

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

>

>

Produzione

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>

articoli Correlati

  • nuova parola chiave
  • Malloc C++()