Действительно ли new char гарантирует выровненную память для типа класса?

Выделение буфера через new char[sizeof(T)]гарантирует выделение памяти, которая правильно выровнена для типа T, где все члены Tимеют их естественное, определяемое реализацией, выравнивание (то есть вы не использовали ключевое слово alignasдля изменения их выравнивания).

Я видел эту гарантию в нескольких ответах здесь, но я не совершенно ясно, как стандарт приходит к этой гарантии.. 5.3.4-10 стандарта дает основное требование: по существу new char[]должен быть выровнен по max_align_t.

Что Мне не хватает бита, который говорит, что alignof(T)всегда будет допустимым выравниванием с максимальным значением max_align_t. Я имею в виду, это кажется очевидным, но mu st результирующее выравнивание структуры будет не более max_align_t? Даже в пункте 3.11-3 говорится, что расширенное выравнивание может поддерживаться, поэтому может ли компилятор самостоятельно решить, что класс является типом с избыточным выравниванием?

57
задан edA-qa mort-ora-y 14 May 2012 в 17:03
поделиться