Согласно https://isocpp.org/wiki/faq/dtors#placement-new адрес, переданный в place-new, должен быть правильно выровнен. Но пример, который он дает, кажется, противоречит этому.
char memory[sizeof(Fred)];
Этот буфер, скорее всего, не выровнен для Fred, так как он немой char[]
, поэтому memory
может указывать на почти везде. Затем он размещает новые по этому адресу.
Является ли пример противоречащим требованию выравнивания, указанному в сноске DANGER?
Это приводит к связанному с ним вопросу:
Как создать буфер (стек или кучу) выровненный для типа T
(для использования в новом месте размещения одного или нескольких объектов T)?
В буфере я имею в виду буфер char[]
или void*
некоторого размера, а не T[]
, потому что это будет распределение объектов, которое впоследствии побеждает точку после размещения. new.
Спасибо.