std:: owner_less
|
Определено в заголовке
<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()
, различаются (например, потому что они указывают на разные подобъекты внутри одного объекта).
Стандартный operator < не определён для слабых указателей и может ошибочно считать два разделяемых указателя на один объект неравнозначными (см. 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 |
Смотрите также
|
предоставляет упорядочение shared указателей на основе владельца
(публичная функция-член
std::shared_ptr<T>
)
|
|
|
предоставляет упорядочение weak указателей на основе владельца
(публичная функция-член
std::weak_ptr<T>
)
|