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)
Definido en el encabezado <memory>
(1)
template < class T >
struct owner_less ; /* undefined */
(desde C++11)
(hasta C++17)
template < class T = void >
struct owner_less ; /* undefined */
(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 un ordenamiento de tipo mixto basado en propietario (en lugar de basado en valor) tanto para std::weak_ptr como para 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 propiedad, incluso si los valores de los punteros en bruto obtenidos mediante get() son diferentes (por ejemplo, porque apuntan a diferentes subobjetos dentro del mismo objeto).

1) No se proporciona un ordenamiento de tipos mixtos basado en propietario para tipos distintos a std::shared_ptr y std::weak_ptr .
2) El ordenamiento de tipo mixto basado en propietario de std::shared_ptr .
Es el predicado de comparación preferido al construir contenedores asociativos con std::shared_ptr como claves, es decir, std:: map < std:: shared_ptr < T > , U, std :: owner_less < std:: shared_ptr < T >>> .
3) La ordenación de tipos mixtos basada en propietario de std::weak_ptr .
Es el predicado de comparación preferido al construir contenedores asociativos con std::weak_ptr como claves, es decir, std:: map < std:: weak_ptr < T > , U, std :: owner_less < std:: weak_ptr < T >>> .
4) La void especialización deduce los tipos de parámetros a partir de los argumentos.

El operator < predeterminado no está definido para punteros débiles, y podría considerar incorrectamente que dos punteros compartidos para el mismo objeto no son equivalentes (consulte std::shared_ptr::owner_before ).

Contenidos

Especializaciones

La biblioteca estándar proporciona una especialización de std::owner_less cuando T no está especificado. En este caso, los tipos de parámetros se deducen de los argumentos (cada uno de los cuales aún debe ser un std::shared_ptr o un std::weak_ptr ).

objeto función que proporciona ordenación basada en propietario de tipos mixtos para punteros compartidos y débiles, independientemente del tipo del objeto apuntado
(especialización de plantilla de clase)
(desde C++17)


Tipos anidados

Tipo anidado Definición
result_type (obsoleto en C++17) (2,3) bool
first_argument_type (obsoleto en C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
second_argument_type (obsoleto en C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
(hasta C++20)

Funciones miembro

operator()
compara sus argumentos usando semántica basada en propietario
(función)

std::owner_less:: operator()

miembro solo de la especialización (2)
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 (3)
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 relación de ordenamiento débil estricto.

lhs y rhs son equivalentes solo si ambos están vacíos o comparten propiedad.

Parámetros

lhs, rhs - punteros de propiedad compartida a comparar

Valor de retorno

true si lhs es menor que rhs según lo determinado por el ordenamiento basado en propietario, false en caso contrario.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2873 C++11 operator ( ) no se requería que fuera noexcept se requiere que sea noexcept

Véase también

proporciona ordenamiento basado en propietario de punteros compartidos
(función miembro pública de std::shared_ptr<T> )
proporciona ordenamiento basado en propietario de punteros débiles
(función miembro pública de std::weak_ptr<T> )