Is allocating a buffer via new char[sizeof(T)]
guaranteed to allocate memory which is properly aligned for the type T
, where all members of T
has their natural, implementation defined, alignment (that is, you have not used the alignas
keyword to modify their alignment).
I have seen this guarantee made in a few answers around here but I'm not entirely clear how the standard arrives at this guarantee. 5.3.4-10 of the standard gives the basic requirement: essentially new char[]
must be aligned to max_align_t
.
What I'm missing is the bit which says alignof(T)
will always be a valid alignment with a maximum value of max_align_t
. I mean, it seems obvious, but must the resulting alignment of a structure be at most max_align_t
? Even point 3.11-3 says extended alignments may be supported, so may the compiler decide on its own a class is an over-aligned type?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…