Spec-Zone.ru › C++

std::owner_less

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

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

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

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

owner_less<void>
объект-функция, обеспечивающий упорядочение смешанных типов на основе владельца для общих и слабых указателей, независимо от типа указанного объекта
(специализация шаблона класса)
(с 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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/owner_less

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API