std::aligned_storage - cppreference.com
De cppreference.com
<metanoindex/>
<tbody> </tbody>
| Definido no cabeçalho <type_traits> |
||
|
|
(desde C++11) | |
Fornece a type membro typedef, que é um tipo POD adequado para utilização como armazenamento não inicializada para qualquer objecto cujo tamanho é no máximo Len e cujo alinhamento requisito é um divisor de Align. O valor padrão de Align é a exigência de alinhamento mais rigoroso (maior) para qualquer objeto cujo tamanho é no máximo Len.
Original:
Provides the member typedef type, which is a POD type suitable for use as uninitialized storage for any object whose size is at most Len and whose alignment requirement is a divisor of Align. The default value of Align is the most stringent (the largest) alignment requirement for any object whose size is at most Len.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Tipos de membro
Nome Original: Name The text has been machine-translated via Google Translate. |
Definition |
type
|
o tipo de POD Original: the POD type of size The text has been machine-translated via Google Translate. |
Notas
O tipo definido por std::aligned_storage pode ser usado para criar blocos de memória não inicializadas adequados para armazenar os objetos de determinado tipo, opcionalmente alinhados mais rigorosa do que o necessário, por exemplo, em um cache ou limite de página.
Original:
The type defined by std::aligned_storage can be used to create uninitialized memory blocks suitable to hold the objects of given type, optionally aligned stricter than necessary, for example on a cache or page boundary.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Possível implementação
Com exceção de argumento padrão, aligned_storage é expresso em termos de alignas:
Original:
Except for default argument, aligned_storage is expressible in terms of alignas:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
template<std::size_t Len, std::size_t Align> struct aligned_storage { typedef struct { alignas(Align) unsigned char data[Len]; } type; };
Exemplo
Uma classe vetor primitivo estática, demonstrando criação, acesso e destruição de objetos no armazenamento alinhados
Original:
A primitive static vector class, demonstrating creation, access, and destruction of objects in aligned storage
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream> #include <type_traits> #include <string> template<class T, std::size_t N> class static_vector { // propertly aligned uninitialized storage for N T's typename std::aligned_storage <sizeof(T), std::alignment_of<T>::value>::type data[N]; std::size_t m_size; public: static_vector() : m_size(0) {}; // Create an object in aligned storage template<typename ...Args> void emplace_back(Args&&... args) { new(data+m_size) T(std::forward<Args>(args)...); m_size++; // bounds check omitted } // Access an object in aligned storage const T& operator[](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<const T*>(data+pos)->~T(); } } }; int main() { static_vector<std::string, 10> v1; v1.emplace_back(std::string(5, '*')); v1.emplace_back(std::string(10, '*')); std::cout << v1[0] << '\n' << v1[1] << '\n'; }
Saída:
Veja também
| alignas especificador | especifica que o armazenamento para a variável devem ser alinhados por (C++11) quantidade específica Original: specifies that the storage for the variable should be aligned by specific amount (C++11) The text has been machine-translated via Google Translate. |
(C++11) |
obtém requisitos do tipo de alinhamento Original: obtains the type's alignment requirements The text has been machine-translated via Google Translate. (modelo de classe) [edit] |
(C++11) |
define o tipo adequado para utilização como armazenamento não inicializados para todos os tipos de dados Original: defines the type suitable for use as uninitialized storage for all given types The text has been machine-translated via Google Translate. (modelo de classe) [edit] |
(C++11) |
Tipo POD com exigência de alinhamento tão grande quanto qualquer outro tipo escalar Original: POD type with alignment requirement as great as any other scalar type The text has been machine-translated via Google Translate. (typedef) [edit] |