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(), отличаются (например, потому что они указывают на разные подобъекты в одном объекте).
std::shared_ptr и std::weak_ptr. std::shared_ptr. std::shared_ptr в качестве ключей, то есть std::map<std::shared_ptr<T>, U, std::owner_less<std::shared_ptr<T>>>. std::weak_ptr. std::weak_ptr в качестве ключей, то есть std::map<std::weak_ptr<T>, U, std::owner_less<std::weak_ptr<T>>>. void выводит типы параметров из аргументов.Оператор < по умолчанию не определен для слабых указателей и может неправильно считать два общих указателя на один объект неэквивалентными (см. std::shared_ptr::owner_before).
СпециализацииБиблиотека стандартной библиотеки предоставляет специализацию
| (с C++17) |
Вложенные типы
| (до 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 |
См. также
| предоставляет упорядочение на основе владельца для общих указателей (публичная функция-член std::shared_ptr<T>) |
|
| предоставляет упорядочение на основе владельца для слабых указателей (публичная функция-член 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