memory_allocator_traits
memory_allocator_traits (std::allocator_traits)
<memory> 헤더에 정의되어 있어요. Allocator의 다양한 속성에 접근하는 표준화된 방법을 제공하는 클래스 템플릿이에요. 표준 컨테이너와 다른 표준 라이브러리 구성 요소들은 이 템플릿을 통해 할당자에 접근해요.
출처: cppreference
본문
template< class Alloc >
struct allocator_traits;
(C++11부터)
allocator_traits는 Allocator의 다양한 속성에 표준화된 방식으로 접근하게 해줘요. 사용자가 제공하는 std::allocator_traits 특수화가 필요한 기능을 모두 구현하는 한, 어떤 클래스 타입도 할당자로 쓸 수 있어요.
std::allocator_traits의 명시적·부분 특수화를 선언하는 프로그램은 ill-formed예요(진단 불필요). (C++23)
기본(특수화되지 않은) std::allocator_traits는 다음 멤버를 가져요.
멤버 타입
| 타입 | 정의 |
|---|---|
allocator_type |
Alloc |
value_type |
Alloc::value_type |
pointer |
Alloc::pointer가 있으면 그것, 아니면 value_type* |
const_pointer |
Alloc::const_pointer가 있으면 그것, 아니면 pointer를 const로 |
void_pointer |
Alloc::void_pointer가 있으면 그것, 아니면 void* |
const_void_pointer |
Alloc::const_void_pointer가 있으면 그것, 아니면 void const* |
size_type |
Alloc::size_type이 있으면 그것, 아니면 std::make_unsigned_t<...> |
difference_type |
Alloc::difference_type이 있으면 그것, 아니면 std::ptrdiff_t |
propagate_on_container_copy_assignment |
Alloc에 있으면 그것, 아니면 std::false_type |
propagate_on_container_move_assignment |
Alloc에 있으면 그것, 아니면 std::false_type |
propagate_on_container_swap |
Alloc에 있으면 그것, 아니면 std::false_type |
is_always_equal |
Alloc에 있으면 그것, 아니면 std::is_empty<Alloc> |
또한 allocate, deallocate, construct, destroy, max_size, select_on_container_copy_construction, rebind_alloc, rebind_traits 같은 정적 멤버 함수를 제공해요. 특정 멤버가 없으면 기본 동작을 제공해, 최소한의 할당자 정의만으로도 표준 컨테이너와 함께 쓸 수 있게 해줘요.