suprimir és un operador que acostuma destrueix la matriu i no matriu (punter) objectes que són creades dinàmicament per la nou operador.
- suprimir es pot utilitzar amb el botó suprimir l'operador o suprimeix l'operador [ ].
- El nou L'operador s'utilitza per a l'assignació de memòria dinàmica que emmagatzema variables a la memòria dinàmica.
- Això significa que l'operador de supressió desassigna la memòria del fitxer Munt .
- El punter a l'objecte no es destrueix, el valor o el bloc de memòria apuntat pel punter es destrueix.
- L'operador de supressió té buit tipus de retorn, el que significa que no retorna cap valor.
A continuació es mostren alguns exemples d'on podem aplicar l'operador delete:
1. Eliminació d'objectes de matriu
Suprimim una matriu utilitzant [] claudàtors.
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. Eliminació del punter NULL
L'eliminació d'un NULL no provoca cap canvi i no genera cap error.
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. Eliminació del punter amb o sense valor
La memòria assenyalada pel punter especificat es desassignarà de la memòria dinàmica.
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;> }> |
>
>Sortida
Value of ptr1 = 0 Value of ptr2 = 20>
4. Suprimir un punter buit
L'operador delete no només desassigna la memòria, sinó que també crida al destructor de l'objecte que s'ha d'esborrar. És per això que, si fem servir el punter void amb suprimir, donarà lloc a un comportament no definit.
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;> }> |
>
>Sortida
ptr deleted successfully>
5. Eliminació de la memòria assignada dinàmicament per malloc()
La desassignació de la memòria assignada per malloc() mitjançant l'operador delete també comporta un comportament indefinit. Es recomana utilitzar delete per a new i free() per a malloc.
C++
declaració de cas java
// 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;> }> |
>
>Sortida
ptr2 deleted successfully>
Nota : Tot i que el programa anterior funciona bé a GCC. No es recomana utilitzar delete amb malloc().
6. Supressió de variables de tipus de dades definides per l'usuari
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;> }> |
>
>Sortida
custom delete for size 1 custom delete for size 18>
Excepcions
1. Intentant suprimir un objecte que no sigui punter
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;> }> |
>
>
Sortida
error: type ‘int’ argument given to ‘delete’, expected pointer>
2. S'està intentant suprimir el punter a una variable local assignada a la pila
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;> }> |
>
>
Sortida
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>
Articles relacionats
- paraula clau nova
- C++ malloc()