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)
Определено в заголовке <memory>
(1)
template < class T >
struct owner_less ; /* undefined */
(since C++11)
(until C++17)
template < class T = void >
struct owner_less ; /* undefined */
(since C++17)
template < class T >
struct owner_less < std:: shared_ptr < T >> ;
(2) (since C++11)
template < class T >
struct owner_less < std:: weak_ptr < T >> ;
(3) (since C++11)
template <>
struct owner_less < void > ;
(4) (since C++17)

Этот функциональный объект обеспечивает владельческую (в отличие от значенической) смешанно-типовую сортировку как для std::weak_ptr , так и для std::shared_ptr . Порядок таков, что два умных указателя считаются эквивалентными только если они оба пусты или разделяют владение, даже если значения сырых указателей, полученных через get() , различаются (например, потому что они указывают на разные подобъекты внутри одного объекта).

1) Владельцевая упорядоченность смешанных типов не предоставляется для типов, отличных от std::shared_ptr и std::weak_ptr .
2) Владельце-ориентированная смешанная типизация упорядочения std::shared_ptr .
Это предпочтительный предикат сравнения при создании ассоциативных контейнеров с std::shared_ptr в качестве ключей, то есть, std:: map < std:: shared_ptr < T > , U, std :: owner_less < std:: shared_ptr < T >>> .
3) Владельце-ориентированная смешанная типизация упорядочивания std::weak_ptr .
Это предпочтительный предикат сравнения при создании ассоциативных контейнеров с std::weak_ptr в качестве ключей, то есть, std:: map < std:: weak_ptr < T > , U, std :: owner_less < std:: weak_ptr < T >>> .
4) Специализация void выводит типы параметров из аргументов.

Стандартный operator < не определён для слабых указателей и может ошибочно считать два разделяемых указателя на один объект неравнозначными (см. std::shared_ptr::owner_before ).

Содержание

Специализации

Стандартная библиотека предоставляет специализацию std::owner_less когда T не указан. В этом случае типы параметров выводятся из аргументов (каждый из которых должен быть либо std::shared_ptr либо std::weak_ptr ).

функциональный объект, предоставляющий смешанное типо-независимое упорядочение на основе владельца для shared и weak указателей
(специализация шаблона класса)
(начиная с C++17)


Вложенные типы

Вложенный тип Определение
result_type (устарел в C++17) (2,3) bool
first_argument_type (устарел в C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
second_argument_type (устарел в C++17) (2) std:: shared_ptr < T >
(3) std:: weak_ptr < T >
(до C++20)

Функции-члены

operator()
сравнивает свои аргументы, используя семантику на основе владельца
(функция)

std::owner_less:: operator()

член только специализации (2)
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(начиная с C++11)
член только специализации (3)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(начиная с C++11)
член обеих специализаций шаблона
bool operator ( ) ( const std:: shared_ptr < T > & lhs,
const std:: weak_ptr < T > & rhs ) const noexcept ;
(начиная с C++11)
bool operator ( ) ( const std:: weak_ptr < T > & lhs,
const std:: shared_ptr < T > & rhs ) const noexcept ;
(начиная с C++11)

Сравнивает lhs и rhs используя семантику на основе владельца. Фактически вызывает lhs. owner_before ( rhs ) .

Порядок является отношением строгого слабого упорядочения.

lhs и rhs эквивалентны только если они оба пусты или разделяют владение.

Параметры

lhs, rhs - указатели с разделяемым владением для сравнения

Возвращаемое значение

true если lhs меньше чем rhs в соответствии с упорядочением на основе владельца, false в противном случае.

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 2873 C++11 operator ( ) не требовалось быть noexcept требуется быть noexcept

Смотрите также

предоставляет упорядочение shared указателей на основе владельца
(публичная функция-член std::shared_ptr<T> )
предоставляет упорядочение weak указателей на основе владельца
(публичная функция-член std::weak_ptr<T> )