Spec-Zone.ru › C++

std::owner_equal

Определено в заголовке <memory>
struct owner_equal;
(с C++26)

Этот объект функции обеспечивает сравнение на равенство смешанных типов на основе владельца (в отличие от сравнения на основе значения) для std::weak_ptr и std::shared_ptr. Сравнение выполняется таким образом, что два умных указателя считаются эквивалентными только в том случае, если они оба пусты или если они делят владение, даже если значения сырых указателей, полученных с помощью get(), отличаются (например, потому что они указывают на разные подобъекты в одном объекте).

1) Сравнение на равенство смешанных типов на основе владельца не предоставляется для типов, отличных от std::shared_ptr и std::weak_ptr.
2) Сравнение на равенство смешанных типов на основе владельца для std::shared_ptr и std::weak_ptr.
Это предпочтительное предикат сравнения при построении неупорядоченных ассоциативных контейнеров с 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>.
3) std::owner_equal выводит типы параметров из аргументов.

Вложенные типы

Вложенный тип Определение
is_transparent неопределённый

Члены-функции

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

std::owner_equal::operator()

template< class T, class U >
bool operator()( const std::shared_ptr<T>& lhs, 
                 const std::shared_ptr<U>& rhs ) const noexcept;
(с C++26)
template< class T, class U >
bool operator()( const std::shared_ptr<T>& lhs, 
                 const std::weak_ptr<U>& rhs ) const noexcept;
(с C++26)
template< class T, class U >
bool operator()( const std::weak_ptr<T>& lhs, 
                 const std::shared_ptr<U>& rhs ) const noexcept;
(с C++26)
template< class T, class U >
bool operator()( const std::weak_ptr<T>& lhs, 
                 const std::weak_ptr<U>& rhs ) const noexcept;
(с 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 в качестве ключей в неупорядоченных ассоциативных контейнерах

См. также

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

Spec-Zone.ru

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