std::owner_equal
Определён в заголовочном файле <memory> | ||
|---|---|---|
struct owner_equal; | (начиная с C++26) |
Этот функциональный объект обеспечивает смешанное сравнение на равенство разнородных типов на основе владения (в отличие от сравнения на основе значений) для std::weak_ptr и std::shared_ptr. Два интеллектуальных указателя считаются эквивалентными только в том случае, если оба они пусты или имеют совместное владение, даже если значения необработанных указателей, полученных с помощью get(), различаются (например, если они указывают на разные подобъекты одного и того же объекта).
Это предпочтительный предикат сравнения при создании неупорядоченных ассоциативных контейнеров с std::shared_ptr и std::weak_ptr в качестве ключей вместе с std::owner_hash, то есть std::unordered_map<std::shared_ptr<T>,U,std::owner_hash,std::owner_equal> или std::unordered_map<std::weak_ptr<T>,U,std::owner_hash,std::owner_equal>.
Вложенные типы
| Вложенный тип | Определение |
|---|---|
is_transparent | не определено |
Функции-члены
| сравнивает аргументы, используя семантику на основе владения (функция) |
std::owner_equal::operator()
template< class T, class U >
constexpr bool operator()( const std::shared_ptr<T>& lhs,
const std::shared_ptr<U>& rhs ) const noexcept;
| (1) | (начиная с C++26) |
template< class T, class U >
constexpr bool operator()( const std::shared_ptr<T>& lhs,
const std::weak_ptr<U>& rhs ) const noexcept;
| (2) | (начиная с C++26) |
template< class T, class U >
constexpr bool operator()( const std::weak_ptr<T>& lhs,
const std::shared_ptr<U>& rhs ) const noexcept;
| (3) | (начиная с C++26) |
template< class T, class U >
constexpr bool operator()( const std::weak_ptr<T>& lhs,
const std::weak_ptr<U>& rhs ) const noexcept;
| (4) | (начиная с C++26) |
Сравнивает lhs и rhs, используя семантику на основе владения. Фактически вызывает lhs.owner_equal(rhs).
Сравнение на равенство является отношением эквивалентности.
lhs и rhs эквивалентны только в том случае, если оба они пусты или имеют совместное владение.
Параметры
| lhs, rhs | - | указатели с совместным владением для сравнения |
Возвращаемое значение
true, если lhs и rhs оба пусты или имеют совместное владение согласно сравнению на равенство на основе владения; в противном случае — false.
Примечания
| Макрос проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_smart_ptr_owner_equality | 202306L | (C++26) | Возможность использовать std::shared_ptr и std::weak_ptr в качестве ключей в неупорядоченных ассоциативных контейнерах |
__cpp_lib_constexpr_memory | 202506L | (C++26) | constexpr std::owner_equal |
См. также
|
(C++26) | обеспечивает сравнение указателей shared_ptr на равенство на основе владения (открытая функция-член std::shared_ptr<T>) |
|
(C++26) | обеспечивает сравнение указателей weak_ptr на равенство на основе владения (открытая функция-член std::weak_ptr<T>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/owner_equal