Namespaces
Variants

std:: owner_equal

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <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 unspecified

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

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 в качестве ключей в неупорядоченных ассоциативных контейнерах

Смотрите также

предоставляет владельческое сравнение на равенство shared указателей
(публичная функция-член std::shared_ptr<T> )
предоставляет владельческое сравнение на равенство weak указателей
(публичная функция-член std::weak_ptr<T> )