2014-01-06 3 views
6

allocator는 T 유형의 객체 만 할당하고 크기가 n * sizeof(T) 인 메모리 블록을 예약 할 수 있습니다. 그러나 std::list<T> 유형의 링크 된 목록 노드는 반드시 T 유형의 객체 일 필요가 없으며 반드시 T 객체와 동일한 크기가 아니어야합니다. 이 경우 std::liststd::allocator을 사용하여 메모리를 할당하는 방법은 무엇입니까?forward_list, set, list 등은 어떻게 std :: allocator를 호출합니까?

+1

'std :: allocator :: rebind'를 사용하고'n '을 1로 설정하면 : D – yzt

답변

4

이 때문에 rebind type이 존재합니다. 그것은 당신이 대신 다른 것을 할당하는 비슷한 할당자를 생성 할 수있게합니다 (예를 들어 node<T>과 같이). 기본적으로이 같은

: 물론

std::allocator<int> int_alloc; 
std::allocator<int>::rebind<node<int>> node_alloc; 
//Perhaps more useful: 
decltype(int_alloc)::rebind<node<int>> node_alloc; 

,이 모든 템플릿 될 것이다, 그러나 희망이 아이디어를 보여주는 실제 상황에서.

자세한 내용은 메모 및 예제 here을 참조하십시오.