std::owner_less
| Definiert in Header <memory> |
||
| (1) | ||
| template< class T > struct owner_less; /* undefiniert */ |
(seit C++11) (bis C++17) |
|
| template< class T = void > struct owner_less; /* undefiniert */ |
(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 Funktions-Objekt bietet inhaltsbasiertes (im Gegensatz zu wertebasiertes) gemischtes Ordering von sowohl std::weak_ptr als auch std::shared_ptr. Die Ordnung ist so, dass zwei intelligente Zeiger nur dann als äquivalent verglichen werden, wenn sie beide leer sind oder wenn sie sich den Besitz teilen, auch wenn die Werte der von get() erhaltenen Rohzeiger unterschiedlich sind (z. B. weil sie auf unterschiedliche Unterobjekte innerhalb desselben Objekts zeigen).
Der Standard operator< ist für schwache Zeiger nicht definiert und kann fälschlicherweise zwei geteilte Zeiger auf dasselbe Objekt als nicht-äquivalent betrachten (siehe std::shared_ptr::owner_before).
SpezialisierungenDie Standardbibliothek stellt eine Spezialisierung von
|
(seit C++17) |
Verschachtelte Typen
|
(bis C++20) |
[bearbeiten] Memberfunktionen
| operator() |
vergleicht seine Argumente anhand von inhaltsbasierten Semantiken (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 Vorlagenspezialisierungen |
||
| 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 mit inhaltsbasierter Semantik. Ruft effektiv lhs.owner_before(rhs) auf.
Die Ordnung ist eine strikte schwache Ordnungsrelation.
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 kleiner ist als rhs gemäß der inhaltsbasierten Ordnung, andernfalls false.
[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 |
|---|---|---|---|
| LWG 2873 | C++11 | operator() war nicht als noexcept gefordert | musste noexcept sein |
[bearbeiten] Siehe auch
| bietet inhaltsbasiertes Ordering von geteilten Zeigern (öffentliche Memberfunktion von std::shared_ptr<T>) | |
| bietet inhaltsbasiertes Ordering von schwachen Zeigern (öffentliche Memberfunktion von std::weak_ptr<T>) |