Espacios de nombres
Variantes

std::owner_less

De cppreference.com
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
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 std::owner_less cuando no se especifica T. En este caso, los tipos de parámetros se deducen de los argumentos (cada uno de los cuales debe ser std::shared_ptr o std::weak_ptr).

Objeto función que proporciona un orden basado en propietario, de tipo mixto, de punteros compartidos y débiles, independientemente del tipo de objeto al que se apunta.
(especialización de plantilla de clase) [editar]
(desde C++17)

Tipos miembro

Tipos miembro Definición
result_type(en desuso en c++17) 2-3) bool
first_argument_type(en desuso en c++17) 2) std::shared_ptr<T>
3) std::weak_ptr<T>
second_argument_type(en desuso en c++17) 2) std::shared_ptr<T>
3) std::weak_ptr<T>
(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>) [editar]
Proporciona ordenamiento de punteros débiles basado en propietario.
(función miembro pública de std::weak_ptr) [editar]