Placement new

Esiste anche un altro modo di utilizzare l'operatore new, detto placement new.
Possiamo, una volta allocata dinamicamente un'area di memoria, riutilizzare lo spazio già allocato per un altro oggetto (o variabile) dello stesso tipo.

Immaginiamo di avere una struttura chiamata Utente.
L'utilizzo generale dell'operatore new è il seguente:

Utente *user1 = new Utente;

delete user1;

Utente *user2 = new Utente;

Nell'esempio allochiamo dinamicamente un'area di memoria, dopodiché la deallochiamo ed infine ne creiamo un'altra.
Perché invece, dal momento che la prima area dev'essere deallocata, non riutilizziamo quella?
Infatti nel secondo new la CPU deve andare a cercare in memoria uno spazio libero da poter utilizzare per allocare una nuova area, mentre se utilizzassimo lo spazio allocato in precedenza risparmieremmo alla CPU questo passaggio.
Ebbene, è possibile farlo tramite il placement new:

Utente *user1 = new Utente;


Utente *user2 = new (user1) Utente;

Come potete vedere nel secondo new specifichiamo l'area da sovrascrivere.
Dal momento che l'area è tale da contenere un'istanza di tipo Utente, è possibile sovrascriverla solo con altre istanze dello stesso tipo.

Nessun commento:

Posta un commento