У меня вопрос относительно размещения new
синтаксиса в C++. Являются ли следующие два фрагмента кода функционально эквивалентными и могут использоваться взаимозаменяемо (я не подразумеваю, что второй должен использоваться, когда первый подходит)?Размещение нового эквивалента поведения
# 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;
Есть ли что-то я должен быть особенно осторожным, когда я использую размещения нового синтаксиса, как это?
Будет ли правильно выделена память, выделенная 'new char [sizeof (T)]'? –
@TadeuszKopec: стандарт гарантирует максимально возможное выравнивание памяти. Это выполняется только в том случае, если вы используете естественные выравнивания (т. Е. Появляетесь со встроенными типами), если вы используете прагмы, чтобы выровнять выравнивание типа, скажем, вдвое больше, чем все, то все ставки отключены. –