Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: Erasable (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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
  • X::value_type ist dasselbe wie T.
  • X::allocator_type ist dasselbe wie std::allocator_traits<A>::rebind_alloc<T>.
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