2014-01-06 8 views
6

Ich bemerke, dass Zuweiser nur Objekte des Typs T reservieren und Speicherblöcke der Größe n * sizeof(T) reservieren können. Verknüpfte Listenknoten innerhalb des std::list<T>-Typs sind jedoch nicht notwendigerweise Objekte des Typs T, noch sind sie notwendigerweise gleich groß wie T Objekte. Wie kann in diesem Fall std::liststd::allocator verwenden, um Speicher zuzuordnen?Wie ruft forward_list, set, list usw. std :: allocator auf?

+1

Durch Verwendung von 'std :: allocator :: Rebind' und Einstellung von' n' auf 1.: D – yzt

Antwort

4

Aus diesem Grund ist die rebind type existiert. Es ermöglicht Ihnen, eine ähnliche allocator zu erstellen, anstatt etwas anderes (wie ein node<T> zum Beispiel) zuordnet.

Im Grunde wie folgt aus:

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

Natürlich in einer realen Situation dies alles als Templat werden würde, aber hoffentlich zeigt dies die Idee. Weitere Informationen finden Sie in den Hinweisen und Beispielen here.

Verwandte Themen