¿Cuál es el uso básico de align_storage?
¿Cuál es el uso básico de std :: tr1 :: align_storage? ¿Se puede usar como memoria automática para un tipo de datos Foo como el de abajo?
struct Foo{...};
std::tr1::aligned_storage<sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* f = new (reinterpret_cast<void*>(&buf)) Foo();
f->~Foo();
Si es así, ¿qué hay de almacenar múltiples Foo en el buf como?
std::tr1::aligned_storage<5*sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* p = reinterpret_cast<Foo*>(&buf);
for(int i = 0; i!= 5; ++i,++p)
{
Foo* f = new (p) Foo();
}
¿Son programas válidos? ¿Hay algún otro caso de uso para ello? La búsqueda en Google solo proporciona la documentación sobre align_storage, pero muy poco sobre su uso.