在线文档教程
C++
应用 | Utilities

std::aligned_storage

科技促进发展::一致[医]储物

Defined in header
template< std::size_t Len, std::size_t Align = /*default-alignment*/ > struct aligned_storage;(since C++11)

提供成员类型胡枝子f。type,这是PODType适合用作任何大小最多为零的对象的未初始化存储。Len谁的对齐要求是Align...

的默认值Align对于任何大小最多都是的对象,最严格的%28是最大的%29对齐要求吗?Len如果未使用默认值,Align必须是alignof(T)为某种类型T,或者行为是未定义的。

如果Len == 0...

成员类型

NameDefinition
typethe POD type of at least size Len with alignment requirement Align

帮助者类型

template< std::size_t Len, std::size_t Align = /*default-alignment*/ > using aligned_storage_t = typename aligned_storage::type;(since C++14)

注记

定义的类型。std::aligned_storage<>::type可用于创建未初始化的内存块,以容纳给定类型的对象,可选地比它们的自然对齐要求更严格,例如在缓存或页边界上。

与任何其他未初始化的存储一样,对象是使用安置新并通过显式析构函数调用销毁。

可能的实施

除默认参数外,对齐[医]存储可以用对齐表示:

模板<std::size[医]T Len,STD::大小[医]T对齐/%2A未实现默认对齐%2A/>结构对齐[医]存储{tydurif struct{对齐%28Align%29无符号字符数据伦;}型;};

*。

一个原始的静态向量类,演示对齐存储中对象的创建、访问和销毁。

二次

#include <iostream> #include <type_traits> #include <string> template<class T, std::size_t N> class static_vector { // properly aligned uninitialized storage for N T's typename std::aligned_storage<sizeof(T), alignof(T)>::type data[N]; std::size_t m_size = 0; public: // Create an object in aligned storage template<typename ...Args> void emplace_back(Args&&... args) { if( m_size >= N ) // possible error handling throw std::bad_alloc{}; new(data+m_size) T(std::forward<Args>(args)... ++m_size; } // Access an object in aligned storage const T& operator[](std::size_t pos) const { return *reinterpret_cast<const T*>(data+pos } // Delete objects from aligned storage ~static_vector() { for(std::size_t pos = 0; pos < m_size; ++pos) { reinterpret_cast<T*>(data+pos)->~T( } } }; int main() { static_vector<std::string, 10> v1; v1.emplace_back(5, '*' v1.emplace_back(10, '*' std::cout << v1[0] << '\n' << v1[1] << '\n'; }

二次

产出:

二次

***** **********

二次

另见

alignas specifierspecifies that the storage for the variable should be aligned by specific amount (C++11)
alignment_of (C++11)obtains the type's alignment requirements (class template)
aligned_union (C++11)defines the type suitable for use as uninitialized storage for all given types (class template)
max_align_t (C++11)POD type with alignment requirement as great as any other scalar type (typedef)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/type/aliing[医]储物