Namensräume
Varianten
Aktionen

std::uses_allocator

Von cppreference.com
< cpp‎ | memory
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
uses_allocator
(C++11)
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
Definiert in Header <memory>
template< class T, class Alloc >
struct uses_allocator;
(seit C++11)

Wenn T einen verschachtelten Typ allocator_type hat, der von Alloc konvertierbar ist, dann ist die Member-Konstante value true. Andernfalls ist value false.

Inhalt

[bearbeiten] Hilfsvariablen-Template

template< class T, class Alloc >
constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value;
(seit C++17)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T den Allocator Alloc verwendet, andernfalls false.
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[bearbeiten] Uses-allocator Konstruktion

Es gibt drei Konventionen für die Übergabe eines Allocators alloc an den Konstruktor eines Typs T.

  • Wenn T keinen kompatiblen Allocator verwendet (std::uses_allocator_v<T, Alloc> ist false), wird alloc ignoriert.
  • Andernfalls ist std::uses_allocator_v<T, Alloc> true, und:
  • Wenn T die *führende Allocator-Konvention* verwendet (ist aufrufbar als T(std::allocator_arg, alloc, args...)), dann verwendet die Uses-allocator Konstruktion diese Form.
  • Wenn T die *nachfolgende Allocator-Konvention* verwendet (ist aufrufbar als T(args..., alloc)), dann verwendet die Uses-allocator Konstruktion diese Form.
  • Andernfalls ist das Programm ill-formed (das bedeutet, std::uses_allocator_v<T, Alloc> ist true, aber der Typ folgt keiner der beiden erlaubten Konventionen).

Die Hilfsfunktionen std::make_obj_using_allocator und std::uninitialized_construct_using_allocator können verwendet werden, um explizit ein Objekt nach dem obigen Protokoll zu erstellen, und std::uses_allocator_construction_args kann verwendet werden, um die Argumentliste vorzubereiten, die der von der Art der Uses-allocator Konstruktion des Typs erwarteten entspricht.

(seit C++20)

[bearbeiten] Spezialisierungen

Gegeben sei ein programdefinierter Typ T, der keinen verschachtelten allocator_type hat. Ein Programm kann std::uses_allocator spezialisieren, um von std::true_type für T abzuleiten, wenn eine der folgenden Anforderungen erfüllt ist:

  • T hat einen Konstruktor, der std::allocator_arg_t als erstes Argument und Alloc als zweites Argument nimmt.
  • T hat einen Konstruktor, der Alloc als letztes Argument nimmt.

In den obigen Definitionen ist Alloc ein Typ, der die Allocator-Anforderung erfüllt oder ein Zeigertyp ist, der in std::experimental::pmr::memory_resource* konvertierbar ist(library fundamentals TS).

Die folgenden Spezialisierungen werden bereits von der Standardbibliothek bereitgestellt:

spezialisiert die Type-Trait std::uses_allocator
(class template specialization) [bearbeiten]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagenspezialisierung) [edit]
spezialisiert die Type-Trait std::uses_allocator
(Klassenvorlagen-Spezialisierung) [bearbeiten]
spezialisiert die Type-Trait std::uses_allocator
(Klassentemplate-Spezialisierung) [bearbeiten]
spezialisiert die Type-Trait std::uses_allocator
(Klassentemplate-Spezialisierung) [bearbeiten]

[bearbeiten] Hinweise

Diese Type-Trait wird von std::tuple, std::scoped_allocator_adaptor und std::pmr::polymorphic_allocator verwendet. Sie kann auch von benutzerdefinierten Allocators oder Wrapper-Typen verwendet werden, um festzustellen, ob das zu erzeugende Objekt oder Mitglied selbst einen Allocator verwenden kann (z. B. ein Container ist), in welchem Fall ein Allocator an seinen Konstruktor übergeben werden sollte.

[bearbeiten] Siehe auch

ein Tag, der zur Auswahl von Allocator-bewussten Konstruktoren verwendet wird
(Tag)[edit]
bereitet die Argumentliste vor, die dem für den gegebenen Typ erforderlichen Uses-Allocator-Konstruktions-Flavor entspricht
(Funktions-Template) [edit]
erstellt ein Objekt des gegebenen Typs mittels Uses-Allocator-Konstruktion
(Funktions-Template) [edit]
erstellt ein Objekt des gegebenen Typs an einer angegebenen Speicherstelle mittels Uses-Allocator-Konstruktion
(Funktions-Template) [edit]
implementiert mehrstufige Allokatoren für mehrstufige Container
(Klassen-Template) [edit]