std::aligned_storage可以看成一个内存对其的缓冲区,原型如下:
template<std::size_t Len, std::size_t Align >= /default-alignment/>
struct aligned_storage;
Len表示所存储类型的sie,Align表示该类型的内存对齐大小
关于 sizeof 和alignof 可以参考:https://blog.csdn.net/TH_NUM/article/details/86551189
例子:
struct A{ //non-POD type
int avg;
int avg2;
double c;
A(int a,int b):avg((a+b)/2){
}
};
using namespace std;
int main() {
typedef std::aligned_storage<sizeof(A), alignof(A)>::type A_pod;
A_pod a,b;
new(&a)A(10,20);
b=a;
// cout<<b.avg<<endl;//错误
// cout<< reinterpret_cast<A>(b).avg<<endl;//错误
cout<< reinterpret_cast<A&>(b).avg<<endl; //正确
return 0;
}
输出:15