Jeśli spojrzeć na the relevant isocpp paper widać, że pierwszy zestaw, o którym wspomniałeś, jest teraz uważany za lepiej umieszczony w std::allocator_traits
. Odkąd pojawiła się biblioteka STL (nawet standardowa biblioteka), nastąpiła zmiana w używaniu cech.
rebind
to także relikwia. Kiedy wyszedł pierwszy STL, aliasy i parametry szablonu szablonu nie były obsługiwane. Dzięki istniejącym funkcjom językowym rebind
wydaje się dość zawiłe. Np., Jak można zobaczyć w an answer to this question, w języku programowania C++, wydanie 4, sekcja 34.4.1, str. 998, komentując 'klasyczną' członek ponownego wiązania w domyślnej klasie przydzielania:
template<typename U>
struct rebind { using other = allocator<U>;};
Bjarne Stroustupr pisze tak: „. Ciekawostką szablon ponownego wiązania jest archaiczny alias Powinno być:
template<typename U>
using other = allocator<U>;
jednak alokator został zdefiniowany zanim takie aliasy były obsługiwane przez C++. "
Tak więc, to standardowa biblioteka nadrabiająca zmiany językowe i paradygmatyczne.
Pierwszy zestaw członków wygląda na sensowny w przypadku kontenerów, a nie przydzielających. Wierzę, że istnieje 'std :: addressof', który zastąpi teraz adres(). Kto i tak potrzebuje max_size; a reszta powinna być wymienna przez wywołanie nowego/jawnego wywołania destruktora. –
Istnieje teraz również ['allocator_traits'] (http://en.cppreference.com/w/cpp/memory/allocator_traits), które uzupełnią brakujące części. –