Namespaces
Variants

std:: owner_less

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Definiert im Header <memory>
(1)
template < class T >
struct owner_less ; /* undefined */
(seit C++11)
(bis C++17)
template < class T = void >
struct owner_less ; /* undefined */
(seit C++17)
template < class T >
struct owner_less < std:: shared_ptr < T >> ;
(2) (seit C++11)
template < class T >
struct owner_less < std:: weak_ptr < T >> ;
(3) (seit C++11)
template <>
struct owner_less < void > ;
(4) (seit C++17)

Dieses Funktionsobjekt bietet eine besitzerbasierte (im Gegensatz zu wertbasierter) gemischttypige Ordnung sowohl für std::weak_ptr als auch für std::shared_ptr . Die Ordnung ist so definiert, dass zwei Smart Pointer nur dann als äquivalent betrachtet werden, wenn sie beide leer sind oder wenn sie sich den Besitz teilen, selbst wenn die Werte der Rohzeiger, die durch get() erhalten werden, unterschiedlich sind (z.B. weil sie auf verschiedene Unterobjekte innerhalb desselben Objekts zeigen).

1) Besitzerbasierte gemischte Typ-Sortierung wird nicht für andere Typen als std::shared_ptr und std::weak_ptr bereitgestellt.
2) Die besitzerbasierte gemischte Typ-Sortierung von std::shared_ptr .
Es ist das bevorzugte Vergleichsprädikat beim Erstellen assoziativer Container mit std::shared_ptr als Schlüsseln, also std:: map < std:: shared_ptr < T > , U, std :: owner_less < std:: shared_ptr < T >>> .
3) Die besitzerbasierte gemischte Typ-Sortierung von std::weak_ptr .
Es ist das bevorzugte Vergleichsprädikat beim Erstellen assoziativer Container mit std::weak_ptr als Schlüsseln, also std:: map < std:: weak_ptr < T > , U, std :: owner_less < std:: weak_ptr < T >>> .
4) Die void -Spezialisierung leitet die Parametertypen aus den Argumenten ab.

Der Standard- operator < ist nicht für schwache Zeiger definiert und könnte fälschlicherweise zwei Shared Pointer für dasselbe Objekt als nicht äquivalent betrachten (siehe std::shared_ptr::owner_before ).

Inhaltsverzeichnis

Spezialisierungen

Die Standardbibliothek stellt eine Spezialisierung von std::owner_less bereit, wenn T nicht angegeben ist. In diesem Fall werden die Parametertypen aus den Argumenten abgeleitet (von denen jedes weiterhin entweder ein std::shared_ptr oder ein std::weak_ptr sein muss).

Funktionsobjekt, das owner-basierte Ordnung von shared und weak Pointern gemischttyps bereitstellt, unabhängig vom Typ des Pointee
(Klassentemplate-Spezialisierung)
(seit C++17)


Verschachtelte Typen

Verschachtelter Typ Definition
result_type (veraltet in C++17) (2,3) bool
first_argument_type (veraltet in C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
second_argument_type (veraltet in C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
(bis C++20)

Memberfunktionen

operator()
vergleicht seine Argumente unter Verwendung besitzerbasierter Semantik
(Funktion)

std::owner_less:: operator()

Nur Mitglied der Spezialisierung (2)
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(seit C++11)
Nur Mitglied der Spezialisierung (3)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(seit C++11)
Mitglied beider Template-Spezialisierungen
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(seit C++11)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(seit C++11)

Vergleicht lhs und rhs unter Verwendung besitzerbasierter Semantik. Ruft effektiv lhs. owner_before ( rhs ) auf.

Die Ordnung ist eine strenge schwache Ordnungsrelation.

lhs und rhs sind nur dann äquivalent, wenn beide leer sind oder Besitz teilen.

Parameter

lhs, rhs - Shared-Ownership-Zeiger zum Vergleichen

Rückgabewert

true wenn lhs gemäß der besitzerbasierten Ordnung kleiner als rhs ist, false andernfalls.

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
LWG 2873 C++11 operator ( ) war nicht als noexcept erforderlich als noexcept erforderlich

Siehe auch

bietet besitzerbasierte Ordnung von Shared Pointern
(öffentliche Elementfunktion von std::shared_ptr<T> )
bietet besitzerbasierte Ordnung von Weak Pointern
(öffentliche Elementfunktion von std::weak_ptr<T> )