scoped_allocator_adaptor — std::scoped_allocator_adaptor
scoped_allocator_adaptor — std::scoped_allocator_adaptor
std::scoped_allocator_adaptor는 다단계 컨테이너(벡터의 셋의 리스트 등)에서 할당자를 올바르게 전파하는 할당자 어댑터예요. <scoped_allocator> 헤더에 제공돼요.
중첩 컨테이너에서 "바깥 컨테이너와 안쪽 컨테이너가 같은 할당 상태를 공유해야" 하는 상황(예: 모두 같은 공유 메모리 세그먼트에 배치)에 유용해요. 각 중첩 레벨에 맞는 할당자를 순서대로 적용해요.
출처: cppreference
본문
std::scoped_allocator_adaptor는 다단계 컨테이너와 함께 쓰는 할당자 클래스 템플릿이에요.
template<class OuterAlloc, class... InnerAllocs>
class scoped_allocator_adaptor : public OuterAlloc;
하나의 바깥 할당자 타입 OuterAlloc과 0개 이상의 안쪽 할당자 타입 InnerAlloc...으로 인스턴스화돼요. scoped_allocator_adaptor로 직접 만들어진 컨테이너는 OuterAlloc로 요소를 할당하고, 요소가 또 컨테이너면 첫 번째 안쪽 할당자를 사용해요. 그 컨테이너의 요소가 또 컨테이너면 두 번째 안쪽 할당자를 사용하고, 계속 이어져요. 컨테이너 레벨이 안쪽 할당자 수보다 많으면 마지막 안쪽 할당자가 더 중첩된 컨테이너에 재사용돼요.
이 어댑터의 목적은 중첩 컨테이너에서 상태 있는 할당자(stateful allocator)를 올바르게 초기화하는 거예요. 예를 들어 중첩 컨테이너의 모든 레벨을 같은 공유 메모리 세그먼트에 배치해야 할 때요. 어댑터의 생성자는 목록의 모든 할당자 인자를 받고, 각 중첩 컨테이너는 필요에 따라 자신의 할당자 상태를 어댑터에서 얻어요.
scoped_allocator_adaptor의 관점에서, 다음 안쪽 할당자가 A라면 std::uses_allocator<T,A>::value == true인 어떤 클래스 T든 컨테이너인 것처럼 재귀에 참여해요. 또한 특정 construct 오버로드에서 std::pair는 그런 컨테이너로 취급돼요.
같이 보기
std::uses_allocatorstd::pmr::polymorphic_allocator