Per allocare in modo dinamico la memoria il C++ mette a disposizione l'operatore new. Questo operatore costruisce uno o più oggetti nell'area heap e ne restituisce l'indirizzo. In caso di errore (memoria non disponibile) restituisce NULL. Pertanto il programmatore dovrà controllare l’allocazione dello spazio di memoria.
Il prototipo dell'operatore new si presenta in questo modo:
new tipo_variabile [dimensione] (valore_iniziale)
In tal caso dei tre operandi dell'istruzione solo il primo è obbligatorio.
Vediamo in dettaglio il significato di ogni operando:
- tipo_variabile è il tipo (anche astratto) dell'oggetto (o degli oggetti) da creare;
- dimensione è il numero degli oggetti, che vengono sistemati nella memoria heap consecutivamente (come gli elementi di un array); se questo operando è omesso, viene costruito un solo oggetto; se é presente, l'indirizzo restituito da new punta al primo oggetto;
- valore_iniziale è il valore con cui l'area allocata viene inizializzata (deve essere di un tipo coerente); se é omesso l'area non é inizializzata.
Vediamo alcuni esempi per capire al meglio l'utilizzo dell'operatore new:
Inizializzazione
int* punt = new int;
in questo modo si alloca un oggetto int nell'area heap e si usa il suo indirizzo per inizializzare il puntatore punt
int* punt = new int [10];
in questo modo si allocano 10 oggetti int nell'area heap e si usa l'indirizzo del primo oggetto per inizializzare il puntatore punt.
Assegnazione con operazione aritmetica
struct nome { ....... };
nome* p_nome;
p_nome = new nome [100] + 10;
in tal caso definisce la struttura nome e si dichiara il puntatore p_nome a questa struttura, a cui si assegna l'indirizzo del decimo dei cento oggetti di tipo nome, allocati nell'area heap.