Namespaces
Variants

C++ named requirements: Erasable (since C++11)

From cppreference.net
C++ named requirements

Spezifiziert, dass ein Objekt des Typs durch einen gegebenen Allocator zerstört werden kann.

Inhaltsverzeichnis

Anforderungen

Gegeben die folgenden Typen, Werte und Ausdrücke:

Typ Definition
T ein Objekttyp
A ein Allokator-Typ
X ein Container-Typ, der alle folgenden Bedingungen erfüllt:
  • X::value_type ist identisch mit T .
  • X::allocator_type ist identisch mit std:: allocator_traits < A > :: rebind_alloc < T > .
Wert Definition
m ein L-Wert vom Typ A
p ein Zeiger vom Typ T*

Wenn der Ausdruck std:: allocator_traits < A > :: destroy ( m, p ) wohlgeformt ist, ist T Löschbar aus X .

Hinweise

Alle Standardbibliothek-Container erfordern, dass ihre Werttypen Erasable erfüllen.

Mit dem Standard-Allokator ist diese Anforderung äquivalent zur Gültigkeit von p - > ~T ( ) , was Klassentypen mit zugänglichen Destruktoren und alle skalaren Typen akzeptiert, aber Array-Typen, Funktionstypen, Referenztypen und void ablehnt.

(bis C++20)

Mit dem Standard-Allokator ist diese Anforderung äquivalent zur Gültigkeit von std:: destroy_at ( p ) , was Klassentypen mit zugänglichen Destruktoren und alle skalaren Typen sowie Arrays davon akzeptiert.

(seit C++20)

Obwohl es bis C++23 erforderlich war, dass ein benutzerdefiniertes destroy verwendet wird, wenn Elemente von std::basic_string zerstört werden, verwendeten alle Implementierungen nur den Standardmechanismus. Die Anforderung wurde durch P1072R10 korrigiert, um der bestehenden Praxis zu entsprechen.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
N3346 C++11 es gab keine Anforderung zu spezifizieren, ob ein Typ
dessen Objekte mit Allokatoren zerstört werden können
Anforderung hinzugefügt

Siehe auch

CopyInsertable
MoveInsertable
EmplaceConstructible
Destructible