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.