Ho una domanda riguardante la sintassi di posizionamento new
in C++. I seguenti due frammenti di codice sono equivalenti dal punto di vista funzionale e possono essere usati in modo intercambiabile (non sto dicendo che il secondo debba essere usato, quando il primo è adatto)?Equivalente comportamento nuovo
# 1
T* myObj = new T();
// Do something with myObj
delete myObj;
# 2
char* mem = new char[sizeof(T)];
T* myObj = new (mem) T();
// Do something with myObj
myObj->~T();
delete[] mem;
C'è qualcosa che dovrebbe essere particolarmente attenti, quando sto usando la nuova sintassi di collocamento come questo?
La memoria allocata da 'new char [sizeof (T)]' sarà allineata correttamente? –
@TadeuszKopec: lo standard garantisce che la memoria abbia il massimo allineamento possibile. Ciò vale solo se si usano allineamenti naturali (cioè, che appaiono con i tipi built-in), se si utilizza la direttiva per eseguire il bump dell'allineamento di un tipo per, diciamo, due volte quello massimo, quindi tutte le scommesse sono disattivate. –