[질문]
이거 polymorphic_allocator 제대로 이해한 거 맞냐
익명(172.98)
2020-08-08 11:36
추천 0
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
;
}
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
;
}
이 이해가 맞나?
댓글 0