C++ 17 이전엔


allocator로 메모리 관리하는 클래스의 instance가 두 개 있는데


이 두 개가 다른 allocator를 쓰면 서로 assign 할 수 없단 말이지


밑에 예시처럼


#include <vector> template<typename T> struct custom_alloc { T* allocate(std::size_t n); void deallocate(T* p, std::size_t); }; int main() { std::vector<int> v0; std::vector<int, custom_alloc<int>> v1; v0 = v1; // error }


C++17에서 이를 해결하기 위해 나온 게


pmr namespace에 있는 polymorphic_allocator랑 memory_resource인데


기존에 여러 allocator를 허용하는 STL이 pmr 안에선


polymorphic_allocator 하나만을 allocator로 쓰고


세부적인 요소는 memory_resource의 구현에 맡긴다는 거지.


그래서 런타임에 메모리 관리 방법이 다른 한 클래스의 instance들을


OOP polymorphism을 이용해 서로 assign이 가능하게 만든 거지.


다음 예시처럼


#include <iostream> #include <memory_resource> #include <vector> int main() { std::pmr::synchronized_pool_resource sync_pool; std::pmr::unsynchronized_pool_resource unsync_pool; std::pmr::vector<int> v0{{0, 1, 2, 3, 4}, &sync_pool}; std::pmr::vector<int> v1{{5, 6, 7, 8, 9}, &unsync_pool}; v0 = v1; }


이 이해가 맞나?