Placement new НЕ предназначен для выравнивания указателей (вы можете просто использовать это назначение!).
Размещение нового предназначено для построения объекта в определенном месте. Существует три способа конструирования объекта в C ++, и размещение new является единственным, который дает вам явный контроль над тем, где этот объект «живет». Это полезно для нескольких вещей, включая разделяемую память, низкоуровневый ввод / вывод устройства и реализацию пула / распределителя памяти.
При выделении стека объект создается на вершине стека, где бы он ни находился в настоящее время.
При использовании «обычного» new объект создается по фактически произвольному адресу в куче, как это управляется стандартной библиотекой (если вы не переопределили оператор new).
Размещение new говорит: «Создайте мне объект по этому адресу специально», и его реализация - просто перегрузка оператора new, который возвращает переданный ему указатель, как средство перехода к остальной части механизма нового оператора. , который создает объект в памяти, возвращаемый оператором новой функции.
Стоит также отметить, что оператор новой функции может быть перегружен произвольными аргументами (как и любая другая функция). Эти другие аргументы передаются через синтаксис "new (arg 2, arg3, ..., argN)". Arg1 всегда неявно передается как "sizeof (что бы вы ни создавали)".