std::tr1::aligned_storage的基本用法是什么?它可以用作以下类型的数据类型Foo的自动存储吗?
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();
如果是这样,如何在buf中存储多个Foo,
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();
}
他们是有效的程序吗?还有其他用例吗?
Google搜索仅产生有关aligned_storage的文档,但很少提供其用法。
最佳答案
好吧,除了您使用reinterpret_cast
之外,对我来说还不错。 (我不确定第二个是100%)。reinterpret_cast
的问题在于,它不能保证转换结果,只有将结果转换回原始类型时,您才能获得原始值。因此,不能保证强制转换的结果将包含相同的位模式或指向相同的地址。
据我所知,将指针x转换为T *类型的可移植解决方案是static_cast<T*>(static_cast<void*>(x))
,因为与static_cast
之间的void*
可以保证将指针指向相同的地址。
但这仅与您的问题成正比关系。 :)
关于c++ - aligned_storage的基本用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1082378/