Spec-Zone.ru › C++

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 не определено

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

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

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

См. также

owner_equal
(C++26)
обеспечивает сравнение указателей shared_ptr на равенство на основе владения
(открытая функция-член std::shared_ptr<T>)
owner_equal
(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

Spec-Zone.ru

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