new char[sizeof(T)]
タイプに対して適切にアラインメントされたメモリを割り当てることを保証することでバッファを割り当てていますT
。ここで、のすべてのメンバーT
は、自然な実装定義のアラインメントを持っています(つまり、alignas
キーワードを使用してアラインメントを変更していません)。
私はこの保証がこのあたりのいくつかの答えでなされているのを見てきましたが、標準がこの保証にどのように到達するかは完全にはわかりません。標準の5.3.4-10は、基本的な要件を示しています。基本的にnew char[]
はに位置合わせする必要がありますmax_align_t
。
私が見逃しているのはalignof(T)
、最大値が常に有効なアライメントになるというビットですmax_align_t
。つまり、それは明白に思えますが、結果として生じる構造の整列はせいぜいである必要がありmax_align_t
ますか?ポイント3.11-3でさえ、拡張アラインメントがサポートされる可能性があると述べているので、コンパイラーは、クラスがオーバーアラインメントされたタイプであると独自に判断できますか?