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::list
std::allocator
verwenden, um Speicher zuzuordnen?Wie ruft forward_list, set, list usw. std :: allocator auf?
6
A
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
- 1. Speicherverwaltung & std :: allocator
- 2. Warum sind std :: allocator :: construct und std :: allocator :: destroy auf Elementtyp Templated?
- 3. Warum gibt `return {};` nicht auf `std :: forward_list` zurück?
- 4. Unterstützt std :: forward_list die manuelle Neuausrichtung?
- 5. std :: allocator ausplanen Teil des Speichers
- 6. Irgendwelche Vorteile zu Gnoms gslist über std :: forward_list?
- 7. Warum nicht von std :: erben allocator
- 8. Wie std :: allocator in meiner eigenen Container-Klasse verwenden
- 9. std :: allocator construct/zerstören vs. placement new/p-> ~ T()
- 10. Concurrent std :: call_once ruft
- 11. Erweitern std :: list
- 12. Array von std :: set und Komparator
- 13. Wie man std :: set iteriert?
- 14. C++ std :: Iterator ohne intern: std :: vector oder std :: list
- 15. Wird eine std :: list teuer?
- 16. Wie vC++ (ex: IListPtr) Zeiger auf std :: list zu konvertieren?
- 17. Objekt aus Std entfernen :: list
- 18. Weitere Std :: Set Woes
- 19. Merging zwei std :: Set und (noch nicht) std :: set :: merge()
- 20. C++ std :: set Komparator
- 21. set jsonarray list in autocompletetextview
- 22. Teil Art von std :: list
- 23. std :: back_inserter für ein std :: set?
- 24. Unterschied zwischen std :: set und std :: priority_queue
- 25. Warum hat std :: allocator Membertypen/Funktionen in C++ 17 verloren?
- 26. Std :: Set Deleter in C++ funktioniert nicht
- 27. Kann std :: list nicht mit list :: back() vergleichen?
- 28. Benutzerdefinierte Functor in std :: set
- 29. Wie man Bereich Spleißen in konstanter Zeit mit std :: forward_list tun?
- 30. Warum möchte std :: list meinen Zuweiser ohne Argumente aufrufen?
Durch Verwendung von 'std :: allocator :: Rebind' und Einstellung von' n' auf 1.: D –
yzt