std::owner_less
| Definido en el archivo de encabezado <memory>
|
||
| (1) | ||
template< class T > struct owner_less; /* no definido */ |
(desde C++11) (hasta C++17) |
|
template< class T = void > struct owner_less; /* no definido */ |
(desde C++17) | |
template< class T > struct owner_less<std::shared_ptr<T>>; |
(2) | (desde C++11) |
template< class T > struct owner_less<std::weak_ptr<T>>; |
(3) | (desde C++11) |
template<> struct owner_less<void>; |
(4) | (desde C++17) |
Este objeto función proporciona una ordenación de tipo mixto basada en propietario (a diferencia de la basada el valor) de std::weak_ptr y std::shared_ptr. El orden es tal que dos punteros inteligentes se comparan equivalentes solo si ambos están vacíos o si comparten la posesión, incluso si los valores de los punteros sin formato obtenidos por get() son diferentes (por ejemplo, porque apuntan a diferentes subobjetos dentro del mismo objeto).
Esta plantilla de clase es el predicado de comparación preferido cuando se crean contenedores asociativos con std::shared_ptr o std::weak_ptr como claves, es decir,
std::map<std::shared_ptr<T>, U, std::owner_less<std::shared_ptr<T>>>
o
std::map<std::weak_ptr<T>, U, std::owner_less<std::weak_ptr<T>>>.
El operator< por defecto no está definido para punteros débiles y puede considerar erróneamente que dos punteros compartidos para el mismo objeto no son equivalentes (véase shared_ptr::owner_before).
Especializaciones
|
La biblioteca estándar proporciona una especialización de
|
(desde C++17) |
Tipos miembro
|
(hasta C++20) |
Funciones miembro
| Compara sus argumentos con semántica basada en propietario. (función) |
std::owner_less::operator()
<tbody> </tbody>| Miembro solo de la especialización de plantilla owner_less<shared_ptr<T>> |
||
bool operator()( const std::shared_ptr<T>& lhs, const std::shared_ptr<T>& rhs ) const noexcept; |
(desde C++11) | |
| Miembro solo de la especialización de plantilla owner_less<weak_ptr<T>> |
||
bool operator()( const std::weak_ptr<T>& lhs, const std::weak_ptr<T>& rhs ) const noexcept; |
(desde C++11) | |
| Miembro de ambas especializaciones de plantilla |
||
bool operator()( const std::shared_ptr<T>& lhs, const std::weak_ptr<T>& rhs ) const noexcept; |
(desde C++11) | |
bool operator()( const std::weak_ptr<T>& lhs, const std::shared_ptr<T>& rhs ) const noexcept; |
(desde C++11) | |
Compara lhs y rhs usando semántica basada en propietario. Efectivamente llama a lhs.owner_before(rhs).
El ordenamiento es una estricta relación de ordenamiento débil.
lhs y rhs son equivalentes solo si ambos están vacíos o comparten la posesión.
Parámetros
| lhs, rhs | - | Punteros de posesión compartida a comparar. |
Valor de retorno
true si lhs es menor que rhs como se determine por el ordenamiento basado en propietario.
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2873 | C++11 | Los operadores operator() podrían no estar declarados noexcept.
|
Se declaran noexcept.
|
Véase también
| Proporciona un ordenamiento de punteros compartidos basado en propietario. (función miembro pública de std::shared_ptr<T>)
| |
| Proporciona ordenamiento de punteros débiles basado en propietario. (función miembro pública de std::weak_ptr)
|