C++ 概念: Allocator
来自cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
封裝內存分配和釋放策略.
Original:
Encapsulates memory allocation and deallocation strategy.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
每一個標準庫組件,可能需要分配或釋放存儲,從
std::string,std::vector,和每一個容器除了std::array,以std::shared_ptrstd::function,通過Allocator:滿足以下要求的類類型的對象.....Original:
Every standard library component that may need to allocate or release storage, from
std::string, std::vector, and every container except std::array, to std::shared_ptr and std::function, does so through an Allocator: an object of a class type that satisfies the following requirements.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
有些要求是可選的:模板std::allocator_traits提供的默認實現所有可選的要求,和所有的標準庫容器和其他分配器感知類訪問的分配器通過
std::allocator_traits,而不是直接.Original:
Some requirements are optional: the template std::allocator_traits supplies the default implementations for all optional requirements, and all standard library containers and other allocator-aware classes access the allocator through
std::allocator_traits, not directly.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[编辑] 要求
鑒於
Original:
Given
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
-
A,的分配器類型TOriginal:A, an Allocator for typeTThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
B,相同類型U分配器Original:B, the same Allocator for typeUThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
ptr,allocator_traits<A>::pointer類型的值,通過調用allocator_traits<A>::allocate()Original:ptr, a value of typeallocator_traits<A>::pointer, obtained by calling allocator_traits<A>::allocate()The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
cptr,allocator_traits<A>::const_pointer類型的值,得到的轉換,從ptrOriginal:cptr, a value of typeallocator_traits<A>::const_pointer, obtained by conversion fromptrThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
vptr,allocator_traits<A>::void_pointer類型的值,得到的轉換,從ptrOriginal:vptr, a value of typeallocator_traits<A>::void_pointer, obtained by conversion fromptrThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
cvptr,值類型allocator_traits<A>::const_void_pointer,得到的轉換cptr或vptrOriginal:cvptr, a value of typeallocator_traits<A>::const_void_pointer, obtained by conversion fromcptror fromvptrThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. -
xptr的dereferencable的指針某種類型XOriginal:xptr, a dereferencable pointer to some typeXThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
| Expression | Requirements | Return type |
|---|---|---|
| A::pointer (可選的) | Satisfies NullablePointer and RandomAccessIterator
|
|
| A::const_pointer (可選的) | A::pointer is convertible to A::const_pointer. Satisfies NullablePointer and RandomAccessIterator
|
|
| A::void_pointer (可選的) | A::pointer is convertible to A::void_pointer
B::void_pointer和A::void_pointer是相同的類型。滿足NullablePointerOriginal: The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
|
| A::const_void_pointer (可選的) | A::pointer, A::const_pointer, and A::void_pointer are convertible to A::const_void_pointer
B::const_void_pointer和A::const_void_pointer是相同的類型。滿足NullablePointerOriginal: The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
|
| A::value_type | the type T
| |
| A::size_type (可選的) | A::size_type can represent the size of the largest object A can allocate
|
unsigned integer type |
| A::difference_type (可選的) | A::difference_type can represent the difference of any two pointers to the objects allocated by A
|
signed integer type |
| A::template rebind<U>::other (可選的[1]) | for any U, B::template rebind<T>::other is A
|
the type B
|
| *ptr | T&
| |
| *cptr | *cptr and *ptr identify the same object | const T&
|
| ptr->m | same as (*ptr).m, if (*ptr).m is well-defined | the type of T::m
|
| cptr->m | same as (*cptr).m, if (*cptr).m is well-defined | the type of T::m
|
| static_cast<A::pointer>(vptr) | static_cast<A::pointer>(vptr) == ptr | A::pointer
|
| static_cast<A::const_pointer>(cvptr) | static_cast<A::const_pointer>(vptr) == cptr | A::const_pointer
|
| a.allocate(n) | allocates storage suitable for n objects of type T, but does not construct them. May throw exceptions.
|
A::pointer
|
| a.allocate(n, cptr) (可選的) | same as a.allocate(n), but may use cptr in unspecified manner to aid locality
|
A::pointer
|
| a.deallocate(ptr, n) | deallocates storage previously allocated by a call to a.allocate(n). Does not call destructors, if any objects were constructed, they must be destroyed before calling a.deallocate(). Does not throw exceptions. | (not used) |
| a.max_size() (可選的) | the largest value that can be passed to A::allocate()
|
A::size_type
|
| a1 == a2 | returns true only if the storage allocated by the allocator a1 can be deallocated through a2. Establishes reflexive, symmetric, and transitive relationship. Does not throw exceptions.
|
bool |
| a1 != a2 | same as !(a1==a2) | bool |
| A a1(a) | Copy-constructs a1 such that a1 == a. Does not throw exceptions.
|
|
| A a(b) | Constructs a such that B(a)==b and A(b)==a. Does not throw exceptions.
|
|
| A a1(std::move(a)) | Constructs a1 such that it equals the prior value of a. Does not throw exceptions.
|
|
| A a(std::move(b)) | Constructs a such that it equals the prior value of A(b). Does not throw exceptions.
|
|
| a.construct(xptr, args) (可選的) | Constructs an object of type X in previously-allocated storage at the address pointed to by xptr, using args as the constructor arguments
|
|
| a.destroy(xptr) (可選的) | Destructs an object of type X pointed to by xptr, but does not deallocate any storage.
|
|
| a.select_on_container_copy_construction() (可選的) | Provides an instance of A to be used by the container that is copy-constructed from the one that uses a currently. Usually returns either a copy of a or a default-constructed A().
|
A
|
| a.propagate_on_container_copy_assignment (可選的) | true if the allocator of type A needs to be copied when the container that uses it is copy-assigned
|
std::true_type or std::false_type or derived from such |
| a.propagate_on_container_move_assignment (可選的) | true if the allocator of type A needs to be copied when the container that uses it is move-assigned
|
std::true_type or std::false_type or derived from such |
| a.propagate_on_container_swap (可選的) | true if the allocators of type A need to be swapped when two containers that use them are swapped
|
std::true_type or std::false_type or derived from such |
注意事項:
Original:
Notes:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[1]重新綁定是唯一可選的(提供由std :: allocator_traits),如果這分配器模板的形式SomeAllocator的,<T, Args>,args是零個或多個額外的模板參數.
Original:
[1] rebind is only optional (provided by std::allocator_traits) if this allocator is a template of the form SomeAllocator<T, Args>, where Args is zero or more additional template parameters.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.