Tengo una pregunta con respecto a la sintaxis de la ubicación new
en C++. ¿Los dos fragmentos de código siguientes son funcionalmente equivalentes y se pueden usar indistintamente (no estoy implicando que se debe usar el segundo, cuando el primero es adecuado)?Colocación nuevo comportamiento equivalente
# 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;
¿Hay algo que debería ser especialmente cuidadoso de, cuando estoy usando la colocación de una nueva sintaxis de esta manera?
¿La memoria asignada por 'new char [sizeof (T)]' se alineará correctamente? –
@TadeuszKopec: el estándar garantiza que la memoria tenga la alineación máxima posible. Esto solo se aplica si usa alineaciones naturales (es decir, que aparecen con los tipos incorporados), si usa pragmas para ajustar la alineación de un tipo a, digamos, dos veces ese máximo, entonces todas las apuestas estarán desactivadas. –