2016-07-25 4 views
12

, 나는 볼이 회원 :
value_type, pointer, const_pointer, difference_type size_type, 및 rebind 모든 사용되지 않습니다 const_reference, reference.
address, max_size, construct, 또는 destroy :왜 std :: allocator가 C++ 17에서 멤버 유형/함수를 잃었습니까? <a href="http://en.cppreference.com/w/cpp/memory/allocator" rel="noreferrer">std::allocator</a> 보면서

소산은 더 이상 회원이 없습니다.

왜 이런 일이 발생 했습니까? polymophic 할당 자와 관련이 있습니까?

+1

첫 번째 멤버 집합은 할당자가 아니라 컨테이너에 실제로 의미가있는 것처럼 보입니다. 주소()를 대체 할 수있는'std :: addressof'가 있다고 생각합니다. 어쨌든 max_size가 필요한 사람; 나머지는 배치 새로운/명시 적 소멸자 호출로 대체 할 수 있어야합니다. –

+1

누락 된 부분을 채울 수있는 [allocator_traits'] (http://en.cppreference.com/w/cpp/memory/allocator_traits)가 있습니다. –

답변

9

the relevant isocpp paper을 보면 처음 언급 한 세트가 std::allocator_traits에 더 잘 위치한다고 생각할 수 있습니다. STL (표준 라이브러리조차도 아님)이 나왔기 때문에 형질을 사용하는 데 더 많은 변화가있었습니다.

rebind도 유물입니다. STL이 처음 출시되었을 때 별칭과 템플릿 템플릿 매개 변수는 지원되지 않았습니다. 이러한 언어 기능이 존재하면 rebind은 상당히 복잡한 것처럼 보입니다. 예를 들어 an answer to this question에서 볼 수 있듯이 C++ 프로그래밍 언어, 4th edition, 34.4.1, p.

template<typename U> 
    struct rebind { using other = allocator<U>;}; 

비얀 Stroustupr이 기록 : 기본 할당 클래스에서 '고전'리 바인드 회원 주석 998. "호기심 리 바인드 템플릿 고풍 별칭을이 있었어야 :

그러나
template<typename U> 
using other = allocator<U>; 

, allocator는 C++에서 이러한 별칭을 지원하기 전에 정의되었습니다. "

그래서 전체적으로 언어와 패러다임의 변화를 따라 잡는 표준 라이브러리입니다.