C++ benannte Anforderungen: Erasable (seit C++11)
Gibt an, dass ein Objekt des Typs durch einen gegebenen Allocator zerstört werden kann.
Inhalt |
[bearbeiten] Anforderungen
Gegeben die folgenden Typen, Werte und Ausdrücke
| Typ | Definition |
T
|
ein Objekttyp |
A
|
ein Allokator-Typ |
X
|
ein Containertyp, der alle folgenden Bedingungen erfüllt
|
| Wert | Definition |
| m | ein lvalue vom Typ A |
| p | ein Zeiger vom Typ T* |
Wenn der Ausdruck std::allocator_traits<A>::destroy(m, p) wohlgeformt ist, ist T von X Erasable.
[bearbeiten] Hinweise
Alle Standardbibliothekscontainer verlangen, dass ihre Werttypen Erasable erfüllen.
|
Mit dem Standard-Allocator ist diese Anforderung äquivalent zur Gültigkeit von p->~T(), was Klassentypen mit zugänglichen Destruktoren und allen Skalartypen akzeptiert, aber Array-Typen, Funktionstypen, Referenztypen und void ablehnt. |
(bis C++20) |
|
Mit dem Standard-Allocator ist diese Anforderung äquivalent zur Gültigkeit von std::destroy_at(p), was Klassentypen mit zugänglichen Destruktoren und allen Skalartypen sowie deren Arrays akzeptiert. |
(seit C++20) |
Obwohl bis C++23 gefordert wurde, dass beim Zerstören von Elementen von std::basic_string ein angepasster destroy verwendet wird, haben alle Implementierungen nur den Standardmechanismus verwendet. Die Anforderung wurde durch P1072R10 korrigiert, um die bestehende Praxis widerzuspiegeln.
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| N3346 | C++11 | gab es keine Anforderung, anzugeben, ob ein Typ dessen Objekte mit Allocatoren zerstört werden können |
fügte die Anforderung hinzu |
[bearbeiten] Siehe auch
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Destructible |