Nowy standard C++ 11 wymaga implementacji STL do obsługi stanów zmiennych w kontenerach. Czy główne implementacje STL (Visual Studio 2008, 2010, libstdC++) są zgodne z tym wymaganiem? Nie znalazłem nic o tym w MSDN lub w dokumentacji libstdC++.Obsługa kompilatorów dla podzielników stanów w kontenerach STL
Odpowiedz
wygląda cechą stanowych podzielników w pojemnikach STL już jest szeroko wspierany. W większości przypadków stanowość alokatora nie powoduje problemów. To, co nie jest jeszcze szeroko wspierane, to nowy sposób radzenia sobie z problematycznymi sytuacjami (zamiana kontenera (czy zamieniać również alokatorem), splice list).
This thread mówi:
w kodzie dla większości bibliotek standardowych bieżących (w tym Dinkumware na stosowany przez MS), stanowe podzielniki są obsługiwane
This tread (libstdC++, 2004) mówi (o ile zrozumiałem poprawnie):
Wspieramy już alokatory, gdzie
l1.get_allocator() != l2.get_allocator()
. Nie robimy żadnych specjalnych postanowień, aby wykryć te alokatory wsplice()
iswap()
.
This blog entry (libstdC++, 2009) mówi:
istniejących kontenerów w trybie C++ 0x są teraz bardziej efektywne wraz z stanowych podzielników (czyli nie ma podzielniki są tworzone w locie na elemencie czasu budowy).
This document mówi o nowym libc++ library:
Wszystkie pojemniki spełniają wszystkie najnowsze wymagania podzielnik które w pełni obsługują stanowe podzielników. - Przestrzeń dla podzielników bezstanowych zoptymalizowanych.
EASTL obsługuje państwowe podzielniki.
This thread zawiera interesujący spór dotyczący przenośności tej funkcji.
Tak więc większość implementacji STL obsługuje podzielniki stanów, co oznacza, że nie tworzą one dodatkowych instancji typu alokatora pod maską, ale przechowują instancję alokatora dostarczoną przez klienta, a wszystkie alokacje/deallokacje są wykonywane przez to. Jednak sposób, w jaki obsługują one pingowanie swap
i list::splice
jest nieudokumentowanym, nieprzenośnym.
AKTUALIZACJA: STL VS2008 wymaga, aby alokatory miały konstruktora kopiującego z szablonami, co uniemożliwia IMO najważniejsze użycie niestandardowych alokatorów: proste, posegregowane przechowywanie.
Dla każdego, kto nie jest zadowolony z obecnego stanu stateful podzielników w STL, polecam rozważyć Boost.Intrusive
i Boost.Container
.
Właściwie _wszystkie biblioteki standardowe wymagają, aby alokatory miały szablonowy konstruktor kopiowania i szablon 'rebind' i używają ich. Dzieje się tak, ponieważ wszystkie pojemniki z wyjątkiem 'wektora' i' deque' przydzielają elementy jako część struktury definiowanej przez implementację, więc muszą utworzyć alokację dla tej struktury z udostępnionego przydziału. Jest to rzecz, o której autor przydziału musi po prostu wziąć pod uwagę. –
g ++ does not Algorytmy pomocy o przydzielonym zasięgu jeszcze.
VS2010 Adapter jest pewne niestandardowe podzielników but not apparently the standard ones
Przydzielanie z ustalonym harmonogramem! = Przydział stanowy –
Czy chcesz zaakceptować jedną z tych odpowiedzi? – spraff