Namensräume
Varianten
Aktionen

std::owner_equal

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
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>
struct owner_equal;
(seit C++26)

Dieses Funktions-Objekt stellt eine besitzerbasierte (im Gegensatz zu einer wertbasierten) gemischte Gleichheitsprüfung sowohl für std::weak_ptr als auch für std::shared_ptr bereit. Die Prüfung ist so gestaltet, dass zwei intelligente Zeiger nur dann als äquivalent gelten, wenn sie beide leer sind oder wenn sie sich den Besitz teilen, selbst wenn die Werte der durch get() erhaltenen Rohzeiger unterschiedlich sind (z.B. weil sie auf verschiedene Unterobjekte desselben Objekts zeigen).

1) Besitzerbasierte gemischte Gleichheitsprüfung wird für andere Typen als std::shared_ptr und std::weak_ptr nicht bereitgestellt.
2) Die besitzerbasierte gemischte Gleichheitsprüfung von std::shared_ptr und std::weak_ptr.
Es ist das bevorzugte Vergleichsprädikat beim Aufbau von ungeordneten assoziativen Containern mit std::shared_ptr und std::weak_ptr als Schlüssel zusammen mit std::owner_hash, d.h. std::unordered_map<std::shared_ptr<T>, U, std::owner_hash, std::owner_equal> oder std::unordered_map<std::weak_ptr<T>, U, std::owner_hash, std::owner_equal>.
3) std::owner_equal leitet die Parametertypen von den Argumenten ab.

Inhalt

[bearbeiten] Verschachtelte Typen

Verschachtelter Typ Definition
is_transparent nicht spezifiziert

[bearbeiten] Member-Funktionen

operator()
vergleicht seine Argumente anhand von inhaltsbasierten Semantiken
(Funktion)

std::owner_equal::operator()

template< class T, class U >

bool operator()( const std::shared_ptr<T>& lhs,

                 const std::shared_ptr<U>& rhs ) const noexcept;
(seit C++26)
template< class T, class U >

bool operator()( const std::shared_ptr<T>& lhs,

                 const std::weak_ptr<U>& rhs ) const noexcept;
(seit C++26)
template< class T, class U >

bool operator()( const std::weak_ptr<T>& lhs,

                 const std::shared_ptr<U>& rhs ) const noexcept;
(seit C++26)
template< class T, class U >

bool operator()( const std::weak_ptr<T>& lhs,

                 const std::weak_ptr<U>& rhs ) const noexcept;
(seit C++26)

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

Die Gleichheitsprüfung ist eine Äquivalenzrelation.

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

Parameter

lhs, rhs - geteilte Besitzzeiger zum Vergleichen

Rückgabewert

true, wenn lhs und rhs beide leer sind oder den Besitz wie durch die besitzerbasierte Gleichheitsprüfung bestimmt teilen, andernfalls false.

[bearbeiten] Anmerkungen

Feature-Test-Makro Wert Std Feature
__cpp_lib_smart_ptr_owner_equality 202306L (C++26) Ermöglicht die Verwendung von std::shared_ptr und std::weak_ptr als Schlüssel in ungeordneten assoziativen Containern

[bearbeiten] Siehe auch

stellt besitzerbasierte Gleichheitsprüfung für Shared Pointers bereit
(public member function of std::shared_ptr<T>) [bearbeiten]
stellt besitzerbasierte Gleichheitsprüfung für Weak Pointers bereit
(public member function of std::weak_ptr<T>) [bearbeiten]