supprimer est un opérateur qui sert à détruire le tableau et non-tableau (aiguille) objets qui sont créés dynamiquement par le nouveau opérateur.
- delete peut être utilisé soit en utilisant le supprimer l'opérateur ou supprimer l’opérateur [ ].
- Le nouveau L'opérateur est utilisé pour l'allocation dynamique de mémoire qui stocke les variables sur la mémoire tas.
- Cela signifie que l'opérateur de suppression libère la mémoire du tas .
- Le pointeur vers l'objet n'est pas détruit, la valeur ou le bloc mémoire pointé par le pointeur est détruit.
- L'opérateur de suppression a vide type de retour, ce qui signifie qu’il ne renvoie aucune valeur.
Vous trouverez ci-dessous quelques exemples d'endroits où nous pouvons appliquer l'opérateur de suppression :
1. Suppression d'objets de tableau
Nous supprimons un tableau en utilisant des crochets [].
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. Suppression du pointeur NULL
La suppression d'un NULL n'entraîne aucun changement et ne génère aucune erreur.
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. Suppression d'un pointeur avec ou sans valeur
La mémoire indiquée par le pointeur spécifié sera libérée de la mémoire tas.
C++
statut git
// 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;> }> |
>
>Sortir
Value of ptr1 = 0 Value of ptr2 = 20>
4. Suppression d'un pointeur vide
L'opérateur delete ne se contente pas de libérer la mémoire, mais il appelle également le destructeur de l'objet à supprimer. C'est pourquoi, si nous utilisons un pointeur void avec delete, cela entraînera un comportement indéfini.
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;> }> |
>
>Sortir
ptr deleted successfully>
5. Suppression de la mémoire allouée dynamiquement par malloc()
La désallocation de la mémoire allouée par malloc() à l'aide de l'opérateur delete conduit également à un comportement indéfini. Il est recommandé d'utiliser delete pour new et free() pour 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;> }> |
>
>Sortir
ptr2 deleted successfully>
Note : Bien que le programme ci-dessus fonctionne correctement sur GCC. Il n'est pas recommandé d'utiliser delete avec malloc().
6. Suppression de variables de types de données définis par l'utilisateur
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;> }> |
>
>Sortir
custom delete for size 1 custom delete for size 18>
Des exceptions
1. Essayer de supprimer un objet non-pointeur
C++
PowerShell inférieur ou égal à
// 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;> }> |
>
>
Sortir
error: type ‘int’ argument given to ‘delete’, expected pointer>
2. Essayer de supprimer le pointeur vers une variable allouée à la pile locale
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;> }> |
>
>
Sortir
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 Liés
- nouveau mot-clé
- malloc C++()