Mam pytanie dotyczące umieszczenia składni new
w C++. Czy poniższe dwa fragmenty kodu są funkcjonalnie równoważne i mogą być używane zamiennie (nie sugeruję, że drugi powinien być używany, gdy pierwszy jest odpowiedni)?Nowy równoważnik zachowania miejsca docelowego
# 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;
Czy coś powinienem być szczególnie ostrożny, gdy używam kwalifikacyjny nową składnię jak to?
Czy pamięć przydzielona przez 'nowy char [sizeof (T)] zostanie prawidłowo wyrównana? –
@TadeuszKopec: Standard gwarantuje, że pamięć ma maksymalne możliwe wyrównanie. Ma to zastosowanie tylko w przypadku korzystania z naturalnych linii trasowania (tj. Wyświetlanych z wbudowanymi typami), jeśli korzystasz z pragmy w celu dostosowania wyrównania typu do, powiedzmy, dwukrotności maksymalnej, wszystkie zakłady są wyłączone. –