uni
Quando si vuole gestire manualmente la memoria si utilizza l’Heap, che al contrario dello Stack che viene gestito automaticamente dall’OS, permette di allocare ed eliminare la memoria a piacimento.
Si utilizza per esempio nei casi in cui non si sa al momento della scrittura quale siano le dimensioni di una array, non è possibile infatti definire una array di dimensioni variabili poiché la memoria nello stack viene allocata prima della partenza del programma.
È invece possibile allocare memoria nello Heap a piacimento durante l’esecuzione del programma, gli oggetti così ottenuti sono detti dinamici e sono allocati nella memoria libera.
Per l’allocazione dinamica utilizziamo l’operatore prefisso new: l’argomento è il tipo dell’oggetto da allocare e restituisce l’indirizzo della memoria allocata.Se non è possibile allocare la memoria voluta, restituisce 0.
int*p = new int;
Si può preventivamente controllare l’esito di una allocazione con la funzione set_new_handler(); della libreria <new>. Questa funzione prende come argomento una funzione di tipo Void e senza argomenti, che viene eseguita se l’allocazione non è possibile.
Gli oggetti allocato con l’operatore new non vengono automaticamente distrutti come gli oggetti nello stack. Per distruggerli serve l’operatore prefisso delete. Esso ha come argomento un puntatore all’oggetto da distruggere, che deve essere stato allocato con l’operatore new, altrimenti restituisce errore.
Se si vuole distruggere una array allocata dinamicamente bisogna utilizzare delete[].
Altrimenti gli oggetti allocati vengono comunque distrutti alla fine del programma.