std::allocator
s construct
und destroy
member werden am Typ des zu konstruierenden Elements parametrisiert:
Was ist der Grund dafür? Warum nehmen sie weder value_type*
noch pointer
? Es scheint, als ob allocator<T>
nur wissen könnte, wie Objekte des Typs T
erstellt oder zerstört werden.
Aus demselben Grund müssen allocator
s die rebind<U>
typedef haben: weil viele Container niemals T
s zuweisen.
Nimm verknüpfte Listen. Diese weisen Knoten zu, von denen jeder ein T
als Mitglied enthält. So allocator
s sind erforderlich, um einen Typ zuordnen zu können, den sie nicht kennen (via rebind<U>
). Dies erfordert jedoch einen Kopiervorgang: Es muss ein neuer Zuordner vom Typ rebind<U>::other
erstellt werden.
Es ist besser, wenn möglich das zu vermeiden. Aus diesem Grund müssen Zuweiser für die Konstruktion und die Vernichtung die entsprechenden Operationen für jeden Typ ausführen, z. B. die internen Knotentypen der verknüpften Liste. Dies ermöglicht auch, dass der interne Knotentyp der verknüpften Liste Allocator::construct/destruct
als Friend-Funktionen hat.
Tags und Links c++ c++11 allocator allocation