Wenn Sie the relevant isocpp paper betrachten, können Sie sehen, dass der erste Satz, den Sie erwähnen, jetzt besser in platziert ist. Seit die STL (nicht einmal Standardbibliothek) herauskam, gab es mehr eine Verschiebung, um Eigenschaften zu verwenden.
rebind
ist auch ein Relikt. Als die STL zum ersten Mal erschien, wurden Aliase und Template-Template-Parameter nicht unterstützt. Mit diesen Sprachfunktionen scheint rebind
ziemlich verschachtelt. Z. B., wie Sie in an answer to this question sehen können, in der C++ Programmiersprache, 4. Ausgabe, Abschnitt 34.4.1, p. 998, das 'klassische' rebind Mitglied in Standard allocator Klasse Kommentierung:
template<typename U>
struct rebind { using other = allocator<U>;};
Bjarne Stroustupr schreibt dazu: „. Die neugierigen rebind Vorlage ist ein archaisches alias Es hätte sein sollen:
template<typename U>
using other = allocator<U>;
jedoch Allokator wurde definiert, bevor solche Aliase von C++ unterstützt wurden. "
Insgesamt ist es die Standardbibliothek, die die Sprache und Paradigmenwechsel einholt.
Die erste Gruppe von Mitgliedern sieht so aus, als wären sie wirklich sinnvoll für Container, nicht für Allokatoren. Ich glaube, dass es jetzt eine 'std :: addressof' gibt, um address() zu ersetzen. Wer benötigt sowieso max_size; und der Rest sollte durch den neuen/expliziten Destruktoraufruf ersetzbar sein. –
Es gibt jetzt auch ein ['allocator_traits'] (http://en.cppreference.com/w/cpp/memory/allocator_traits), das die fehlenden Teile ausfüllt. –