Operatore delete C++
In C++, l’operatore binario delete (con un operando opzionale e l’altro obbligatorio) dealloca la memoria dell’area heap puntata dall’operando (obbligatorio). Non restituisce alcun valore e quindi deve essere usato da solo in un’istruzione (non essendo né un l-value né un r-value non può essere usato in un’espressione con altre operazioni).
Es.: | allocazione: | int* punt = new int ; |
deallocazione: | delete punt ; |
Contrariamente all’apparenza l’operatore delete non cancella il puntatore né altera il suo contenuto: l’unico effetto é di liberare la memoria puntata rendendola disponibile per ulteriori allocazioni (se l’operando non punta a un’area heap alcuni compilatori generano un messaggio di errore (o di warning), altri no, ma in ogni caso l’operatore delete non ha effetto).
int a=5; int *p=new int;//faccio puntare p ad int cout<<"Indirizzo di int è contenuto in p ="<<p<<endl; delete p; cout<<"Indirizzo di int è contenuto in p ="<<p<<endl;//si nota che con delete non ho cancellato l'indirizzo p=&a;//faccio puntare p ad a però prima devi liberare lo spazio puntato precedente se non continua a puntarlo e mi occupa memoria //delete p;//non ha effetto perche p puntava ad un oggetto nello stack p=new int; cout<<"Indirizzo di int è contenuto in p ="<<p<<endl; delete p;//ora ha senso perche p puntava ad un oggetto heap cout<<"Indirizzo di int è contenuto in p ="<<p<<endl; //si nota che delete non cancella l'indirizzo ma libera solo l'area puntata, in modo che possa essere puntata da qualcun altro