このプログラムは形式が正しくありませんか?
#include <new>
struct A
{
int a;
int b;
};
struct B
{
int a;
};
int main()
{
void* p(operator new(sizeof(A)));
new (p) A();
static_cast<A*>(p)->~A();
new (p) B();
static_cast<B*>(p)->~B();
operator delete(p);
}
p
type に対して正しく整列されることが保証されていることに注意してくださいA
。しかし、タイプはB
どうですか?規格は何か言及していますか?再調整する標準的な方法はありp
ますか?
編集:受け入れられた答えにはもっと説明が必要だと思います。operator new
そのサイズのオブジェクトに対して正しく配置されたポインターを返す必要がありますが、そのオブジェクトはどのような型になりますか? 認識しない (そしてアラインメントは型に依存する) ため、可能なすべての型のインスタンスに対して適切にアラインされたポインターを提供する必要があります。また、「小さい」型の最大アラインメントは「大きい」型のアラインメントよりも小さいため、ポインターは正しくアラインされている必要があります。