C++ named requirements: Erasable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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:
|
| 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 |