[C++] polymorphic_allocator
Updated:
개요
- 다형성을 이용해 allocator는 polymorphic_allocator 하나를 쓰고 세부 구현은 memory_resource에 따라 동작
- 서로 다른 allocator를 사용하는 경우 assign이 불가한 문제를 해결
예제
- 코드
#include <iostream> #include <memory_resource> #include <vector> using namespace std; template <class T> struct custom_allocator { typedef T value_type; custom_allocator() noexcept {} template <class U> custom_allocator(const custom_allocator<U> &) noexcept {} T *allocate(std::size_t n) { return static_cast<T *>(::operator new(n * sizeof(T))); } void deallocate(T *p, std::size_t n) { ::delete (p); } }; int main() { { vector<int> v0; vector<int, custom_allocator<int>> v1; /* compile error v0 = v1; */ } { pmr::synchronized_pool_resource sync_pool; pmr::unsynchronized_pool_resource unsync_pool; pmr::vector<int> v0{{0, 1, 2, 3, 4}, &sync_pool}; pmr::vector<int> v1{{5, 6, 7, 8, 9}, &unsync_pool}; v0 = v1; for (const auto &iter : v0) { cout << iter << endl; } } return 0; }
- 실행 결과
5 6 7 8 9