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