memory_polymorphic_allocator

memory_polymorphic_allocator (std::pmr::polymorphic_allocator)

<memory_resource> 헤더에 정의되어 있어요. 구성된 std::pmr::memory_resource에 따라 서로 다른 할당 동작을 보이는 Allocator 클래스 템플릿이에요. C++17부터 도입됐어요.

출처: cppreference

본문

template< class T >
class polymorphic_allocator;          // since C++17, until C++20
template< class T = std::byte >
class polymorphic_allocator;          // since C++20

클래스 템플릿 std::pmr::polymorphic_allocator는 구성된 std::pmr::memory_resource에 따라 서로 다른 할당 동작을 보이는 Allocator예요. memory_resource가 런타임 다형성을 사용해 할당을 관리하므로, 다른 컨테이너 인스턴스가 다른 polymorphic_allocator를 가져도 그들은 생성 시 지정한 메모리 리소스에 따라 할당해요. 기본 할당자는 std::pmr::get_default_resource()가 돌려주는 리소스로 구성돼요.

멤버 함수

  • (생성자): 기본·리소스 지정·복사·복사(move) 생성
  • allocate/deallocate: 메모리 할당·해제 (기반 memory_resource에 위임)
  • resource(): 연관된 memory_resource 반환
  • construct/destroy: 객체 생성·파괴
  • select_on_container_copy_construction: 복사 시 리소스 유지
std::pmr::monotonic_buffer_resource pool;
std::pmr::vector<int> v(&pool);   // polymorphic_allocator 는 pool 을 사용
std::pmr::string s(&pool);

// 같은 타입이지만 다른 리소스를 쓰는 인스턴스
std::pmr::vector<int> v2(std::pmr::new_delete_resource());

주의 (Notes)

  • rebind를 지원해 T가 달라도 같은 리소스를 공유해요.
  • C++20부터 기본 템플릿 인자 T = std::byte를 가져, 리소스만으로 allocator를 만들 수 있어요.

polymorphic_allocator는 메모리 리소스 전략을 런타임에 바꿀 수 있어, 성능 튜닝·격리·테스트에서 유연하게 쓰여요.

더 알아보기 (Learn more)

cppreference